代码改变世界

解决 Linq To SQL 中 DataContext 没有 CreateTable 方法的郁闷

2009-02-08 00:11  麦舒  阅读(1438)  评论(1编辑  收藏  举报

用过Linq To SQL的朋友都清楚,DataContext 有 CreateDatabase() 这个方法,但是却没有CreateTable(),有些情况下,还是需要CreateTable()的,比如说在虚拟主机上,一般都是没有建立数据库的权限。代码比较简单,看一下就明白了。

 

Code
namespace ALinq.Mapping
{
    
class CreateTableDemo
    {
        [Table(Name 
= "User")]
        
class User
        {
            [Column]
            
public int ID;

            [Column]
            
public string Name;

        }

        
static void Main()
        {
            var constr 
= @"Data Source=NOTEBOOK\SQLEXPRESS;Initial Catalog=DemoDataContext;Integrated Security=True";
            var context 
= new DataContext(constr) { Log = Console.Out };
            var metaTable 
= context.Mapping.GetTable(typeof(User));
            Debug.Assert(metaTable 
!= null);

            var typeName 
= "System.Data.Linq.SqlClient.SqlBuilder";
            var type 
= typeof(DataContext).Assembly.GetType(typeName);
            var bf 
= BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.InvokeMethod;
            var sql 
= type.InvokeMember("GetCreateTableCommand", bf, nullnullnew[] { metaTable });
            Console.WriteLine(sql);
            
//Excute SQL Command
        }
    }
}