我可以使用LINQ使用datacontext.createDatabase()创建带有一些组成表的数据库。问题是,每次我想向数据库添加新表并使用此方法时,我必须首先删除数据库,然后重新创建整个包含附加表的数据库。这显然会清空我以前填充表格的所有内容。
是否有一种方法可以将新表简单地添加到数据库中,而无需每次都从头开始重新创建?
是否有一种方法可以将新表简单地添加到数据库中,而无需每次都从头开始重新创建?
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);
}
}
以下代码创建了一个名为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();
}
}
目前还没有这样的功能可用。
即使在EF4中也没有 - 至少现在还没有......这些位(Code-First Database Evolution)没有被纳入最终的EF 4.1版本.... :-(
我听说微软的团队正在努力解决这个问题(EF“迁移”) - 但仍在开发中。