Ошибки валидации при генерации модели - PullRequest
4 голосов
/ 29 июля 2011

Я работаю, как мне кажется, в реализации кода 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 ]

2 голосов
/ 03 августа 2011

По сути, я нашел набор классов, которые создали циклическую ссылку A.B.C.A (исходные классы были сгенерированы из очень плохо спроектированной XML-схемы).После удаления циклической ссылки эта ошибка была устранена.

1 голос
/ 30 июля 2011

Независимо от того, генерируется ли он на лету или доступен во время разработки, у вас, вероятно, есть файл EDMX в вашем решении, верно? Именно здесь я буду проверять. Помните, что в этой схеме есть три уровня - уровень хранения, концептуальный уровень и уровень отображения. Я бы проверил каждый из этих слоев (не уверен, что это относится к слою отображения) на наличие дублирующихся объектов - в частности, права CourtCase.

Если ваш EDMX генерируется на лету, я бы выписал копию в файловую систему, чтобы вам было проще ее проверить.

Мне было бы интересно узнать, достигнет ли выполнение того момента, когда вы десериализуете данные XML. Это поможет исключить данные XML как источник проблемы.

Редактировать : Я думаю, что в вашем исходном сообщении указана "база данных сначала". Я не так хорошо знаком с «сначала кодом», но нашел это отличное прохождение во время расследования.

Edit2 : После небольшого расследования Я думаю, что «другой» тип является результатом соглашения. Поэкспериментируйте с удалением некоторых из этих условных обозначений .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...