我可以使用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