什么用EF Code First确定SQL Azure数据库版和大小?

时间:2012-02-21 19:44:44

标签: .net entity-framework-4 azure ef-code-first azure-sql-database

我有一个POC解决方案,它使用ASP.NET MVC 3创建一个网站,并使用Entity Framework 4.3 Code First方法进行数据访问。我能够部署到Azure中的托管服务,我的数据库基于我的连接字符串在SQL Azure中创建。我不明白的是如何确定数据库版本(Web)和大小(1GB)。这只是默认值还是可控制的?

我可能计划通过在进入生产时将我的数据库初始化程序设置为null并且无论如何都要管理它来解决这个问题,但我想了解这些选项。感谢

2 个答案:

答案 0 :(得分:1)

您可以在CREATE DATABASE来电中指定版本和最大尺寸。如果省略了edition和maxsize参数,则默认为Web,1GB。完整的CREATE DATABASE电话是:

CREATE DATABASE database_name  [ COLLATE collation_name ]
{
   (<edition_options> [, ...n]) 
}

<edition_options> ::= 
{
   (MAXSIZE = {1 | 5 | 10 | 20 | 30 … 150} GB) 
    |(EDITION = {'web' | 'business'})
}

有关详细信息,请参阅this MSDN reference page

答案 1 :(得分:0)

您可以使用以下一种常见解决方案:

选项一:您可以在创建Azure数据库后更改其层级

我讨厌这种解决方案,因为(1)您总是会不时地忘记这样做。 (2)这意味着在创建数据库之后必须等待更多时间才能开始工作。 (3)如果您不能依靠ORM,并且需要自己管理数据库,那么这是什么意思?!

选项二:您始终可以使用直接查询预先创建数据库

如果您确实想使用EF之类的ORM,在大多数情况下,这是我的首选。同样,缺点是您自己管理数据库,并且需要知道编写查询,而不仅仅是使用ORM。

您可以使用实体框架方法“ SqlCommand.ExecuteNonQuery”在应用程序中执行此操作。实际上,这是必须知道的方法。

专家可以通过自己编写直接查询来绕过ORM不良解决方案的能力,从而将EF用于复杂系统。这意味着“将EF与纯查询和数据库管理相结合”。

例如:

var Query2CreateDB = $"CREATE DATABASE RonenArielyDB2(EDITION = 'Basic', SERVICE_OBJECTIVE = 'Basic',MAXSIZE = 100 MB);";
ExecuteNonQuery(connectionString, Query2CreateDB, commandTimeout: 600);

这就是为什么在使用Entity Framework或任何其他ORM之前必须首先学习如何编写查询和使用查询管理数据库的原因!

选项三:创建您自己的自定义EF初始化程序(覆盖内置类)

对于那些希望依靠实体框架之类的纯ORM解决方案的开发人员来说,这是最佳解决方案!

以下帖子中有一个很好的例子! https://blog.siliconvalve.com/2014/11/12/use-azure-management-api-sdk-in-an-entity-framework-custom-database-initializer/

选择解决方案?