由EF代码优先决定SQL Azure数据库版本和大小的因素?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了由EF代码优先决定SQL Azure数据库版本和大小的因素?相关的知识,希望对你有一定的参考价值。
我有一个POC解决方案,该解决方案使用ASP.NET MVC 3创建网站和用于数据访问的Entity Framework 4.3代码优先方法。我能够部署到Azure中的托管服务,并且基于连接字符串在SQL Azure中创建数据库。我不明白的是如何确定数据库版本(Web)和大小(1GB)。这只是默认值还是可控制的?
我可能打算通过在生产时将数据库初始化程序设置为null来实现此目的,并且无论如何都要自行进行管理,但是我想了解这些选项。谢谢
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以获取更多详细信息。
选项一:创建后,您可以更改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/
选择解决方案
以上是关于由EF代码优先决定SQL Azure数据库版本和大小的因素?的主要内容,如果未能解决你的问题,请参考以下文章
EF - 代码优先 - SQL 默认值 getdate() 给出错误
ASP.NET EF5 代码优先不创建 SQL Server CE 数据库