我可以使用LINQ創建一個使用datacontext.createDatabase()構成表的數據庫。問題是,每次我想向數據庫添加一個新表並使用此方法時,我必須先刪除數據庫,然後使用附加表重新創建整個數據庫。這顯然使我以前填充表格的所有內容變得空白。使用LINQ to SQL創建數據庫
有沒有一種方法可以簡單地將新表添加到數據庫中,而無需每次重新創建它?
我可以使用LINQ創建一個使用datacontext.createDatabase()構成表的數據庫。問題是,每次我想向數據庫添加一個新表並使用此方法時,我必須先刪除數據庫,然後使用附加表重新創建整個數據庫。這顯然使我以前填充表格的所有內容變得空白。使用LINQ to SQL創建數據庫
有沒有一種方法可以簡單地將新表添加到數據庫中,而無需每次重新創建它?
不,目前沒有這樣的功能可用。
甚至在EF4 - 至少不是現在......這裏這些位(Code-First Database Evolution)沒能進決賽EF 4.1版本.... :-(
我聽說微軟的團隊在溶液(EF「遷移」)努力工作 - 但它
我看到兩種方法可以做到這一點
第一
可以使用的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);
}
}
+1您的第一個選擇是我們在使用L2S時所做的。我們用程序創建的模型差異信息創建了一堆語句並執行它。行得通。 – UrbanEsc 2011-09-02 09:56:54
附帶的代碼創建一個數據庫,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();
}
}
這是如何回答OP的問題? – UrbanEsc 2011-09-02 09:57:30
但是,您可以有一個Sample Data類,它將在重新創建時填充數據庫。我想這可能適用於開發。 – noinstance 2011-06-08 19:17:33
@nosuchnick:那是在EF 4.1代碼中,對吧?不要認爲Linq-to-SQL有類似的東西。 – 2011-06-08 19:20:10
嗯,可能。我現在第一次使用Linq和EF,使用EF4.1。 – noinstance 2011-06-08 19:23:19