Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在运行时使用实体框架在sql数据库中创建表,并在运行时更新模型?_C#_.net_Entity Framework_C# 4.0_.net 4.0 - Fatal编程技术网

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

C# 如何在运行时使用实体框架在sql数据库中创建表,并在运行时更新模型?,c#,.net,entity-framework,c#-4.0,.net-4.0,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, " + "FILENA

我知道,当我使用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();
    }
}

但我使用的是实体框架,我有一些工作需要在运行时创建表。我找了很多关于它的东西,但没有找到。任何帮助都将不胜感激。

实体框架还具有类似的功能,如
myCommand.ExecuteOnQuery()
,您可以尝试
一些实体。ExecuteStoreCommand(“一些sql语句”)


考虑到实体框架需要数据模型和数据库之间的映射,似乎无法使用集成查询语言直接创建/修改表(否则需要在运行时修改数据模型)。因此,由于没有可靠的参考文献支持这一观点,我认为
某些实体.ExecuteStoreCommand()
可能是唯一的方法。

实体框架不适用于没有静态数据库架构的场景

原因:

  • 实体框架映射是静态的-动态修改需要在运行时更改描述映射的XML文件,并使用修改后的文件
  • 即使更改了映射,代码中仍然没有更改或新创建的实体类。EF不支持
    dynamic
    ,因此唯一的方法是使用创建表之前创建的新类动态加载程序集,或者大量使用
    Reflection.Emit
    并让程序“自行编写”
如果您只需要创建一个数据库,但表总是相同的,那么您就可以了。您可以使用ADO.NET代码创建数据库和表,并仅将修改后的连接字符串传递给上下文的构造函数。但要求是静态数据库模式=表的定义没有更改。

请阅读此线程:

最好使用Redis之类的键值存储或CouchDB之类的无模式数据库,而不是SQL


那么如何使用SomeEntities.AddTo.();方法,这就是问题所在。由于没有静态数据模型映射,因此在编写代码时,某些不存在的Entities.AddTo…()不可用。我可以提出的解决方案是完全使用SQL语句……我承认这一点都不优雅。考虑到.NET4有动态对象,我想在实体框架的未来版本中可能会有与动态相关的解决方案?或者在当前版本上可能有更优雅的解决方案?让我们等待其他人的回答。请阅读以下帖子:你能举一个创建数据库的例子,但表总是一样的。以及如何根据变量值修改app.config/web.config中的连接字符串。