使用LINQ to SQL创建数据库。

5
我可以使用LINQ使用datacontext.createDatabase()创建带有一些组成表的数据库。问题是,每次我想向数据库添加新表并使用此方法时,我必须首先删除数据库,然后重新创建整个包含附加表的数据库。这显然会清空我以前填充表格的所有内容。
是否有一种方法可以将新表简单地添加到数据库中,而无需每次都从头开始重新创建?
3个回答

3
我看到有两种方法可以实现这个目标。
第一种方法是,您可以使用DataContext的ExceuteCommand方法运行一些T-SQL语句来创建表格。
第二种方法是,如果您已经映射了表格类型,您可以使用这个hack函数,如此处所建议。
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时所做的。我们根据模型上程序创建的不同信息创建了一堆语句并执行它们。效果还可以。 - user604613

1

以下代码创建了一个名为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();
    }
}

这怎么回答楼主的问题呢? - user604613

0

目前还没有这样的功能可用。

即使在EF4中也没有 - 至少现在还没有......这些位(Code-First Database Evolution)没有被纳入最终的EF 4.1版本.... :-(

我听说微软的团队正在努力解决这个问题(EF“迁移”) - 但仍在开发中。


然而,您可以拥有一个样本数据类,在重新创建时填充数据库。我猜它可能适用于开发。 - noinstance
@nosuchnick:这是在EF 4.1 Code-First中,对吧?我认为Linq-to-SQL没有类似的东西。。 - marc_s
嗯,可能吧。我现在第一次同时使用Linq和EF,使用的是EF4.1版本。 - noinstance

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接