模型生成期间的验证错误

时间:2011-07-29 13:03:04

标签: c# .net entity-framework

我正在工作,我猜是代码优先的EF 4.1实现。数据库已经存在,并且已经存在基本模型(由XSD.exe为我的传入XML数据生成)。我编写了自己的映射并更新了模型,以便与Entity Framework正常运行。

当我尝试运行代码时,我收到以下错误:

  

在模型生成期间检测到一个或多个验证错误:

     

System.Data.Edm.EdmEntityType:Name:架构中的每个类型名称都必须   独一无二。类型名称'CourtCase'已经定义。

我检查并加倍检查,绝对只在一个位置定义了这个类。我也习惯于下面的行来阻止DbContext尝试创建自己的模型。

Database.SetInitializer<LoadContext>(null);

我的XML数据被反序列化到我的模型中,然后我只是想将它保存到数据库中:

var serializer = new XmlSerializer(typeof (CourtCase));
var xmlReader = new XmlTextReader(
   new MemoryStream(Encoding.Default.GetBytes(_itemText)));

_deserializedCase = (CourtCase) serializer.Deserialize(xmlReader);

Database.SetInitializer<LoadContext>(null);
using (var dbContext = new LoadContext())
{
  dbContext.Cases.Add(_deserializedCase);
  dbContext.SaveChanges();
}

的DbContext:

public class LoadContext : DbContext
{
  public DbSet<CourtCase> Cases { get; set; }

  protected override void OnModelCreating(DbModelBuilder modelBuilder)
  {
     modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
     modelBuilder.Configurations.Add(new CaseMap());
     etc.
  }
}

我是否遗漏了Entity Framework配置的另一个关键组件?

完整堆栈跟踪

at System.Data.Entity.ModelConfiguration.Edm.EdmModelExtensions.ValidateAndSerializeCsdl(EdmModel model, XmlWriter writer)
   at System.Data.Entity.DbModelBuilder.Build(DbProviderManifest providerManifest, DbProviderInfo providerInfo)
   at System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection)
   at System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext)
   at System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input)
   at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
   at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
   at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
   at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext()
   at System.Data.Entity.Internal.Linq.InternalSet`1.ActOnSet(Action action, EntityState newState, Object entity, String methodName)
   at System.Data.Entity.Internal.Linq.InternalSet`1.Add(Object entity)
   at System.Data.Entity.DbSet`1.Add(TEntity entity)

2 个答案:

答案 0 :(得分:2)

基本上我发现了一组创建循环引用A.B.C.A的类(原始类是从设计非常糟糕的XML Schema生成的)。删除循环引用后,此错误已解决。

答案 1 :(得分:1)

无论是动态生成还是设计时可用,您的解决方案中都可能有EDMX文件,对吧?我会在这里检查。请记住,此架构中有三个层 - 存储层,概念层和映射层。我会检查这些层中的每一层(不确定这适用于映射层)是否存在重复实体 - 特别是CourtCase的权利。

如果您的EDMX是动态生成的,那么我会将一份副本写入文件系统,以便您可以更轻松地检查它。

我很想知道执行是否超出了您反​​序列化XML数据的程度。这将有助于排除XML数据作为问题的根源。

编辑:我认为您的原始帖子指定了“数据库优先”。我对“代码优先”并不熟悉,但在调查时确实发现了great walkthrough

Edit2 :经过多一点调查  我的猜测是'其他'类型是约定的结果。尝试删除部分these conventions