2011-06-08 135 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