Я создаю хороший шаблон T4 для шаблона репозитория для моих сущностей. Вместо того, чтобы вручную анализировать xml в файле edmx, я использую EdmItemCollection для создания представления графа объекта для концептуальной модели.
Мне удалось получить много информации из этой модели. Но я не могу найти, где найти модификаторы доступа Getter и Setter. Они присутствуют в CSDL-части файла edmx.
Пример:
<Property Name="CustomerID" Type="String" Nullable="false" MaxLength="5" Unicode="true" FixedLength="true"
a:SetterAccess="Public" xmlns:a="http://schemas.microsoft.com/ado/2006/04/codegeneration" />
Где в графе объектов я должен искать эту информацию?
Вот пример того, как я анализирую дерево объектов.
EdmItemCollection edmItems = new EdmItemCollection(new XmlReader[] { csdlReader });
var ownEntities = from item in edmItems
where item.BuiltInTypeKind == BuiltInTypeKind.EntityType
select item as EntityTypeBase;
Entities = (from ent in ownEntities // Entities is a property, therefore no declaration
select new Entity
{
Name = ent.Name,
SetName = (from entSet in entityContainer.BaseEntitySets
where (entSet.ElementType == ent) || (ent.BaseType != null && (entSet.ElementType.FullName.Equals(ent.BaseType.FullName)))
select entSet.Name).FirstOrDefault(),
Keys = (from keys in ent.KeyMembers
select new Entity.Member
{
Name = keys.Name,
Type = keys.TypeUsage.EdmType.Name
}).ToList(),
Properties = (from prop in ent.Members
select new Entity.Member
{
Name = prop.Name,
Type = prop.TypeUsage.EdmType.Name,
IsCollection = prop.TypeUsage.EdmType.BuiltInTypeKind == BuiltInTypeKind.CollectionType
}).ToList()
}).ToList();
Надеюсь, понятно, в каком направлении я иду.
После долгих размышлений через код EdmItemCollection он не загружает схему http://schemas.microsoft.com/ado/2006/04/codegeneration, поэтому он просто игнорирует эти свойства.
Но я надеюсь, что кто-нибудь поможет мне найти эту информацию?