如何在运行时使用Entity框架在sql数据库中创建表并在运行时更新模型?

Muj*_*sir 2 .net c# entity-framework .net-4.0 c#-4.0

我知道当我使用ado.net时,我可以在运行时以编程方式创建数据库或表,如:

String str;
SqlConnection myConn = new SqlConnection("Server=localhost;Integrated security=SSPI;database=master");

str = "CREATE DATABASE MyDatabase ON PRIMARY " +
    "(NAME = MyDatabase_Data, " +
    "FILENAME = 'C:\\MyDatabaseData.mdf', " +
    "SIZE = 2MB, MAXSIZE = 10MB, FILEGROWTH = 10%) " +
    "LOG ON (NAME = MyDatabase_Log, " +
    "FILENAME = 'C:\\MyDatabaseLog.ldf', " +
    "SIZE = 1MB, " +
    "MAXSIZE = 5MB, " +
    "FILEGROWTH = 10%)";

SqlCommand myCommand = new SqlCommand(str, myConn);
try 
{
    myConn.Open();
    myCommand.ExecuteNonQuery();
    MessageBox.Show("DataBase is Created Successfully", "MyProgram", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (System.Exception ex)
{
    MessageBox.Show(ex.ToString(), "MyProgram", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
finally
{
    if (myConn.State == ConnectionState.Open)
    {
        myConn.Close();
    }
}
Run Code Online (Sandbox Code Playgroud)

但我正在使用实体框架,我有一些工作,我必须在运行时创建表.我已经搜索了很多关于它但我没办法.任何帮助,将不胜感激.

Lad*_*nka 6

实体框架不适用于您没有静态数据库架构的情况.

原因:

  • 实体框架映射是静态的 - 动态修改需要,在运行时描述映射的XML文件的更改以及使用修改的文件.
  • 即使更改了映射,您仍然没有在代码中更改或新创建的实体类.EF不支持dynamic所以唯一的方法是使用在创建表之前创建的新类动态加载程序集或大量使用Reflection.Emit并让程序"自行编写".

如果您只需要创建一个数据库,但表格总是相同的,那么您应该没问题.您可以使用该ADO.NET代码创建数据库和表,并仅将已修改的连接字符串传递给上下文的构造函数.但要求是静态数据库模式=表的定义没有变化.