Как проверить модульным тестом, что свойства помечены как вычисленные в модели ORM?
Я создал ORM с помощью Entity Framework 5.0 (C# 4.5) - сначала база данных.
Некоторые свойства объектов помечены как вычисленные (привязаны к столбцам со значениями по умолчанию).
Как проверить модульным тестом, что свойства помечены как вычисленные в модели ORM?
Примечание: проверьте необходимость контроля вычисленных свойств после аварийного воссоздания объекта в ORM.
Описание сущности в *.edmx:
<EntityType Name="Users">
<Key>
<PropertyRef Name="Identifier" />
</Key>
<Property Name="Identifier" Type="bigint" Nullable="false"
StoreGeneratedPattern="Identity" />
<Property Name="Name" Type="nvarchar" Nullable="false" MaxLength="32" />
<Property Name="PasswordHashCode1" Type="int" Nullable="false" />
<Property Name="PasswordHashCode2" Type="int" Nullable="false" />
<Property Name="CreateDateTime" Type="datetime2" Nullable="false"
StoreGeneratedPattern="Computed" />
</EntityType>
1 ответ
Я не уверен, относится ли это к вашему делу, но если вы хотите прочитать metadata
во время выполнения - из EntityFramework model
Вы могли бы попробовать несколько вещей, упомянутых в моем предыдущем посте здесь (и далее улучшено ОП)...
Как программно читать метаданные EF DbContext?
Это говорит о DbContext
(с которым вы можете работать с любой стороны, так что это относится и к вам) - но, в частности, просто получить ObjectContext
- и продолжаем с этого момента...
var container = objectContext.MetadataWorkspace.GetEntityContainer(objectContext.DefaultContainerName, DataSpace.CSpace);
// and just to get you started...
var baseset = objectContext
.MetadataWorkspace
.GetEntityContainer(objectContext.DefaultContainerName, DataSpace.CSpace)
.BaseEntitySets
.First(meta => meta.ElementType.Name == "MyBaseClass");
var elementType = objectContext
.MetadataWorkspace
.GetEntityContainer(objectContext.DefaultContainerName, DataSpace.CSpace)
.BaseEntitySets
.First(meta => meta.ElementType.Name == "MyBaseClass")
.ElementType;
EdmMember member = elementType.Members[2]; // e.g. 3rd property
Facet item;
if (member.TypeUsage.Facets.TryGetValue("StoreGeneratedPattern", false, out item))
{
var value = ((StoreGeneratedPattern)item.Value) == StoreGeneratedPattern.Computed;
}
Вы получаете MetadataWorkspace и можете оттуда идти дальше.
Нам удалось извлечь свойства навигации и т. Д., Но для каждого свойства может быть какая-то другая информация, например calculated
, Я не пробовал, но это может помочь.
Также я сначала не пробовал это для модели или базы данных - но я не понимаю, почему это не должно работать - инфраструктура одинакова (EF, а не код в первую очередь).
РЕДАКТИРОВАТЬ: я добавил более конкретный код, чтобы вы начали (см. Отредактированный код). Такого рода работы (вы получаете то, где хранятся "грани"), это не готовый к использованию код, требуется больше работы.