使用LINQ to SQL创建数据库
本文关键字:创建 数据库 SQL to LINQ 使用 | 更新日期: 2023-09-27 17:58:46
我可以使用LINQ使用datacontext.createDatabase()创建一个包含一些组成表的数据库。问题是,每次我想向数据库中添加一个新表并使用这种方法时,我都必须先删除数据库,然后用额外的表重新创建整个数据库。这显然会清空我之前在表格中填充的所有内容。
有没有一种方法可以简单地将新表添加到数据库中,而不必每次从头开始重新创建它?
我看到了两种实现的方法
第一个
您可以使用DataContext的ExcuteCommand方法来运行一些T-SQL语句来创建表。
和第二个
如果你已经映射了表类型,你可以使用这个破解功能,这里建议
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"迁移"),但它仍在上工作