c# - 如何在运行时使用 Entity Framework 在sql数据库中创建表并在运行时更新模型?

标签 c# .net entity-framework c#-4.0 .net-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();
    }
}

但我正在使用 Entity Framework ,并且我有一些工作需要在运行时创建表。我已经搜索了很多,但我没有办法。任何帮助将不胜感激。

最佳答案

Entity Framework 不适用于没有静态数据库架构的场景。

原因:

  • Entity Framework 映射是静态的 - 需要动态修改,XML 文件的更改描述了运行时的映射并使用修改后的文件。
  • 即使更改了映射,您的代码中仍然没有更改或新创建的实体类。 EF 不支持 dynamic,因此唯一的方法是使用在创建表之前创建的新类动态加载程序集,或者大量使用 Reflection.Emit 并让您的程序“编写本身”。

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

关于c# - 如何在运行时使用 Entity Framework 在sql数据库中创建表并在运行时更新模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8950884/

相关文章:

.NET集合和大对象堆(LOH)

.net - 是否有 API 调用来开始扫描硬件设备

.net - Visual Studio 忽略 MSBuild 文件 (csproj) 自定义

entity-framework - 更改 sp 时的函数导入

.net - 没有行为的 Entity Framework POCO-需要重新设计以消除代码异味

c# - iPad 状态栏有时会消失,留下一片空白——但我从不隐藏它!

c# - 如何取消/退出或退出 Bot Framework 中的 PromptDialog.Choice?

c# - EF 的 DatabaseGeneratedOption.Identity 属性不适用于 ulong 类型

c# - 组合框数据源不创建项目

entity-framework - SQL Server Express 和 Entity Framework