我正在使用 MVC 4.0 和 EF 4.3.1 试用新的 Visual Studio 11 Beta。
添加控制器时,我收到以下消息“无法检索 'MyService.Entities.Email' 的元数据。'System.Data.Entity.Internal.AppConfig' 的类型初始化程序引发异常”
复制品
我有一个基本的解决方案,它有一个实体项目(MyService.Entities)和 MVC 项目(MyService.Website)。
在 Entities 项目中,我首先拥有用于“电子邮件”的类和用于 DbContext 的类的代码。这两个类看起来像: EntityDb
namespace MyService.Entities
{
public class EntitiesDb : DbContext
{
public EntitiesDb(string nameOrConnectionString)
: base(nameOrConnectionString)
{ }
public EntitiesDb()
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// Sets up the defaults for the model builder
// Removes the metadata being written to the database, This is being depreciated anyhow
modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
// Sets the table names so that they are named as a none plural name
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
// Creates the database from scratch when it builds
base.OnModelCreating(modelBuilder);
}
public DbSet<Email> Emails { get; set; }
}
}
电子邮件
namespace MyService.Entities
{
public class Email
{
public Email()
{
}
[Key, DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.Identity)]
public int EmailId { get; set; }
public string Subject { get; set; }
public string BodyHTML { get; set; }
}
}
我在 MyService.Website MVC 项目中引用了 MyService.Entities 项目,并将连接字符串设置为适合我的数据库名称
<add name="EntitiesDb" connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=EntitiesDb;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
当我通过执行以下操作创建 MVC 脚手架时:
- 右键单击控制器文件夹 >添加>控制器
- 将控制器名称设置为EmailController
- 使用实体框架将模板设置为具有读/写操作和视图的控制器
- 将模型类设置为电子邮件(MyService.Entities)
- 将数据上下文类设置为EntitiesDb (MyService.Entities)
- 将视图设置为Razor
它显示一条消息
“无法检索 'MyService.Entities.Email' 的元数据。'System.Data.Entity.Internal.AppConfig' 的类型初始化程序引发异常”
令人困惑的是,它最初有效,然后我开始向数据库中添加更多实体和属性,然后它不允许我这样做。我现在已经缩小了规模,它仍在这样做。
在查看论坛后,我尝试了一些事情:
- 在 MVC 项目中检查连接字符串是否正确
- 实体项目中的连接字符串
- 重新安装 Visual Studio 11 Beta,以防任何更新影响它
- 检查引用是否匹配(它们都是 EntityFramework 版本 4.3.1.0)
- 删除数据库以重建(现在我没有;o))
这是VS11中的错误吗?我是否在某处缺少对元数据的引用?
非常感谢任何帮助。
编辑:通过卸载 EntitiesFramework 并重新安装 NuGet 包解决了问题。