SQL Server 2008:确保已将IncludeMetadataConvention添加到DbModelBuilder约定中

时间:2012-01-10 14:36:13

标签: c# asp.net-mvc-3 entity-framework ef-code-first

我得到的完整错误是:

无法检查模型兼容性,因为数据库不包含模型元数据。确保已将IncludeMetadataConvention添加到DbModelBuilder约定中。

我曾经尝试使用SQL Server Compact,它工作正常,但托管服务提供商只支持专用服务器的CE,我在共享计划,所以我使用的是SQL Server 2008.我在db中的连接字符串是采用以下格式:

  <connectionStrings>
    <add name="DBContext"
         connectionString="Data Source=1.1.1.1;Initial Catalog=dbname;User Id=user;Password=pass;"
         providerName="System.Data.SqlClient"/>
  </connectionStrings>

我还有一个在Application_Startup中运行的DatabaseInitializer。如果需要任何进一步的代码,请告诉我?我也没有创建edmx数据模型,我使用的是EF Code First。

我更改了初始化程序代码始终删除数据库,但现在我收到错误,数据库'master'中的CREATE DATABASE权限被拒绝。当我告诉它使用初始目录时,我不知道为什么会得到这个。

我现在将null传递给SetInitializer,但现在我收到以下错误:

无法打开登录请求的数据库“dbname”。登录失败。 用户'user'登录失败。

我仍在使用上面的连接字符串。

1 个答案:

答案 0 :(得分:4)

  

我更改了初始化代码始终删除数据库,但现在我得到了   错误,数据库'master'中的CREATE DATABASE权限被拒绝。一世   当我告诉它初始目录时,我不知道为什么会得到这个   使用

您必须永远不要在共享主机中执行此操作,因为您几乎从未拥有直接创建数据库的权限。数据库只能在托管提供商的特殊界面中创建。 SQL服务器允许您删除自己拥有的数据库,但一旦删除它,您的权限就会消失,如果没有创建数据库的权限,您将无法重新创建它(在共享主机中您从未拥有此权限)。

  

我现在将null传递给SetInitializer,但现在我收到以下错误:

为时已晚。您的数据库已删除。您必须通过托管服务提供商界面创建它或联系您的托管服务提供商以重新创建它。

  

我还有一个在Application_Startup中运行的DatabaseInitializer。

您不能在共享主机中使用任何内置数据库初始化程序,因为所有这些都希望它们将创建数据库。您可以使用custom initializer将表填充到现有数据库。