J'ai créé un joli template T4 pour un modèle de référentiel pour mes entités. Au lieu d'analyser manuellement le fichier xml dans le fichier edmx, j'utilise EdmItemCollection pour créer une présentation de graphique d'objet pour le modèle conceptuel.Localisation des modificateurs d'accès getter et setter dans EdmItemCollection de Entity Framework
J'ai pu obtenir beaucoup d'informations sur ce modèle. Mais je ne peux pas trouver où trouver les modificateurs d'accès Getter et Setter. Ils sont présents dans la partie CSDL du fichier edmx.
Exemple:
<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" />
Où dans le graphe d'objet dois-je chercher ces informations?
Voici un exemple d'analyse de l'arborescence d'objets.
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();
J'espère que c'est clair dans quelle direction je vais.
Après un grand nombre de réflexions à travers le code de l'EdmItemCollection, il ne charge pas le schéma http://schemas.microsoft.com/ado/2006/04/codegeneration, il ignore donc ces propriétés. Mais j'espère que quelqu'un pourra m'aider à trouver comment trouver cette information?