使用LINQ to SQL创建数据库

时间:2011-06-08 19:11:07

标签: c# linq-to-sql

我可以使用LINQ使用datacontext.createDatabase()创建一个包含一些组成表的数据库。问题是,每次我想要向数据库添加新表并使用此方法时,我必须首先删除数据库,然后使用附加表重新创建整个数据库。这显然使我以前填充表格的所有内容都空白。

有没有办法简单地将新表添加到数据库中,而不是每次都从头开始重新创建它?

3 个答案:

答案 0 :(得分:4)

我认为有两种方法可以做到这一点

首先

您可以使用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 :(得分: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();
    }
}

答案 2 :(得分:0)

不,目前还没有这样的功能。

甚至不在EF4中 - 至少现在......这些位(Code-First Database Evolution)没有进入最终的EF 4.1版本......: - (

我听说微软的团队正在努力寻求解决方案(EF“迁移”) - 但它仍在努力