ModelValidationException, когда модели наследуются от BaseEntity
У меня есть некоторые классы моделей, которые наследуются от одного абстрактного класса, который, в свою очередь, является производным от BaseEntity.
открытый абстрактный класс Item: BaseEntity
Когда я пытаюсь создать Entity Data Model в моем контексте, я получаю следующую ошибку: System.Reflection.TargetInvocationException: Исключение было сгенерировано целью вызова. ---> System.Data.Entity.ModelConfiguration.ModelValidationException: одна или несколько ошибок проверки были обнаружены во время генерации модели:
DataLayer.EntityAspect:: EntityType "EntityAspect" не имеет определенного ключа. Определите ключ для этого EntityType. DataLayer.EntityKey:: EntityType "EntityKey" не имеет определенного ключа. Определите ключ для этого EntityType. DataLayer.MetadataStore:: EntityType "MetadataStore" не имеет определенного ключа. Определите ключ для этого EntityType. DataLayer.Validator:: EntityType "Validator" не определен ключ. Определите ключ для этого EntityType. DataLayer.DataType:: EntityType "DataType" не имеет определенного ключа. Определите ключ для этого EntityType. DataLayer.StructuralType:: EntityType "StructuralType" не имеет определенного ключа. Определите ключ для этого EntityType. DataLayer.ValidationError:: EntityType "ValidationError" не имеет определенного ключа. Определите ключ для этого EntityType. DataLayer.ValidationContext:: EntityType "ValidationContext" не определен ключ. Определите ключ для этого EntityType. DataLayer.StructuralProperty:: EntityType "StructuralProperty" не имеет определенного ключа. Определите ключ для этого EntityType. EntityAspect: EntityType: EntitySet "EntityAspect" основан на типе "EntityAspect", для которого не определены ключи. EntityKeys: EntityType: EntitySet "EntityKeys" основан на типе "EntityKey", для которого не определены ключи. MetadataStores: EntityType: EntitySet "MetadataStores" основан на типе "MetadataStore", для которого не определены ключи. Validators: EntityType: EntitySet "Validators" основан на типе "Validator", для которого не определены ключи. DataTypes: EntityType: EntitySet "DataTypes" основан на типе "DataType", для которого не определены ключи. StructuralTypes: EntityType: EntitySet "StructuralTypes" основан на типе "StructuralType", для которого не определены ключи. ValidationErrors: EntityType: EntitySet "ValidationErrors" основан на типе "ValidationError", для которого не определены ключи. ValidationContexts: EntityType: EntitySet "ValidationContexts" основан на типе "ValidationContext", для которого не определены ключи. StructuralProperties: EntityType: EntitySet "StructuralProperties" основан на типе "StructuralProperty", для которого не определены ключи.
в System.Data.Entity.Core.Metadata.Edm.EdmModel.Validate() в System.Data.Entity.DbModelBuilder.Build(DbProviderManifest providerManifest, провайдер DbProviderInfoInfo) в System.Data.Entity.DbConvisionBuilU System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext) в System.Data.Entity.Internal.RetryLazy`2.GetValue(вход TInput) в System.Data.Entity.Internal.LazyInternalContext.Initial.Data.Entity.Internal.LazyInternalContext.get_ModelBeingInitialized() в System.Data.Entity.Infrastructure.EdmxWriter.WriteEdmx(контекст DbContext, писатель XmlWriter) --- Конец внутренней трассировки стека исключений --- в System.RuntimeMethokele target, аргументы Object[], сигнатура sig, логический конструктор) в System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(параметры объекта obj, параметры Object[], аргументы Object[]) в System.Reflection.RuntimeMethodInfo.Invoke(объектный объект, inving BindingFlags) okeAttr, Binder Binder, параметры Object[], CultureInfo culture) в System.RuntimeType.InvokeMember(имя строки, BindingFlags bindingFlags, Binder Binder, Object target, Object[] предоставлял Args, ParameterModifier[] модификаторы, CultureInfo culture, String[] namedParams) в Microsoft.DbContextPackage.Handlers.ViewContextHandler.ViewContext(MenuCommand menuCommand, Контекст объекта, Тип systemContextType)
Если я удаляю наследование BaseEntity и создаю модель данных Entity, она завершается успешно. Что делает BaseEntity, чтобы сломать мою модель?
Проблема реального мира заключается в том, что когда я пытаюсь вернуть метаданные из вызова DataService.Metadata(), он также попадает в эту ошибку.
Есть идеи как обойти это?
Спасибо
1 ответ
Закончилось использование "хака", в результате чего мои модели сущностей на стороне сервера не получили BaseEntity, а мои модели сущностей на стороне клиента. Я достиг этого, используя частичные классы и ссылки на файлы в VS