【发布时间】:2016-05-11 20:26:57
【问题描述】:
我在另一个 VS 项目中使用了多个相互关联的类,例如:
namespace MyOtherProject
{
public class A {
public string Name {get;set;}
}
public class B {
public int Value {get;set;}
public A Child {get;set;}
}
}
现在我想在 EF 中首先将这些类用作代码的 POCO。但是我不需要数据库中的所有类,而只需要其中的一些。所以我创建了一个上下文:
public class MyContext : DbContext
{
public MyContext () : base("MyContext ")
{
}
public DbSet<B> Bs { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
当我尝试运行该项目时,出现此错误:
System.Data.Entity.ModelConfiguration.ModelValidationException:一或 在模型生成过程中检测到更多的验证错误: MyProject.A:名称:模式中的每个类型名称都必须是唯一的。类型 名称“A”已定义。
请注意,错误中的命名空间与A类的定义不同,因为我的A类是在另一个(共享)项目中定义的。相反,命名空间是上下文之一。
您可以省略 DbSet 和 DbSet 声明,它的工作原理是一样的。实体框架将 隐式包含它们,因为 Student 实体引用了 注册实体和注册实体引用课程 实体。
我的假设(未证实)是 EF 看到 B 引用了 A,但没有 A 类型的数据集,所以它在内部生成了一个 A 类,然后突然发现有两个这样的类。
任何人都知道确切的问题是什么以及我可以做些什么来解决它?我有太多不需要的类,所以我不想为我拥有的每个类创建数据集。
【问题讨论】:
-
Database.SetInitializer
(new CreateDatabaseIfNotExists ());您可以在上下文构造函数中添加上述代码并检查 -
有时这个问题与您的 DB_migration 相关
-
数据库已经存在,无法创建。
-
如果你有数据库已经存在,你可以使用 DropCreateDatabaseAlways 选项如果创建了新的数据库那么我们可以理解问题是在迁移中
-
你可以使用上下迁移的方法来解决你的问题..!
标签: c# entity-framework-6