2011-06-08 138 views
5

我可以使用LINQ创建一个使用datacontext.createDatabase()构成表的数据库。问题是,每次我想向数据库添加一个新表并使用此方法时,我必须先删除数据库,然后使用附加表重新创建整个数据库。这显然使我以前填充表格的所有内容变得空白。使用LINQ to SQL创建数据库

有没有一种方法可以简单地将新表添加到数据库中,而无需每次重新创建它?

回答

0

不,目前没有这样的功能可用。

甚至在EF4 - 至少不是现在......这里这些位(Code-First Database Evolution)没能进决赛EF 4.1版本.... :-(

我听说微软的团队在溶液(EF“迁移”)努力工作 - 但它

+0

但是,您可以有一个Sample Data类,它将在重新创建时填充数据库。我想这可能适用于开发。 – noinstance 2011-06-08 19:17:33

+0

@nosuchnick:那是在EF 4.1代码中,对吧?不要认为Linq-to-SQL有类似的东西。 – 2011-06-08 19:20:10

+0

嗯,可能。我现在第一次使用Linq和EF,使用EF4.1。 – noinstance 2011-06-08 19:23:19

3

我看到两种方法可以做到这一点

第一

可以使用的DataContext的ExceuteCommand - 方法仍然正在制定运行一些T-SQL语句来创建表。

和第二

你可以使用这个技巧的功能,如果你已经映射表类型,如建议here

public void CreateTable(Type linqTableClass) 
{ 
    using (var tempDc = new DmsDataContext()) 
    { 
     var metaTable = tempDc.Mapping.GetTable(linqTableClass); 
     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, null, null, new[] { metaTable }); 
     var sqlAsString = sql.ToString(); 
     tempDc.ExecuteCommand(sqlAsString); 
    } 
} 
+0

+1您的第一个选择是我们在使用L2S时所做的。我们用程序创建的模型差异信息创建了一堆语句并执行它。行得通。 – UrbanEsc 2011-09-02 09:56:54

0

附带的代码创建一个数据库,dynamicDatabase11,和一张桌子,books

public class MyDatabse : DataContext 
{ 
    public Table<Bookss> Bookss; 
    public MyDatabse(string connection) : base(connection) { } 
} 

[Table(Name = "Books")] 
public class Bookss 
{ 
    [Column(IsPrimaryKey = true)] 
    public string Title; 
    [Column] 
    public string Rating; 
} 
class Program 
{ 
    static void Main(string[] args) 
    { 
     CreateDatabase("DynamicDatabase11"); 
    } 
    public static void CreateDatabase(string Dbname) 
    { 

     MyDatabse db = new MyDatabse("ConString"+Dbname+""); 
     db.CreateDatabase(); 
    } 
} 
+0

这是如何回答OP的问题? – UrbanEsc 2011-09-02 09:57:30