Как проверить модульным тестом, что свойства помечены как вычисленные в модели 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, а не код в первую очередь).

РЕДАКТИРОВАТЬ: я добавил более конкретный код, чтобы вы начали (см. Отредактированный код). Такого рода работы (вы получаете то, где хранятся "грани"), это не готовый к использованию код, требуется больше работы.

Другие вопросы по тегам