私は自分のエンティティのリポジトリ パターン用の素敵な T4 テンプレートを作成しています。edmx ファイルの xml を手動で解析する代わりに、EdmItemCollection を使用して、概念モデルのオブジェクト グラフ プレゼンテーションを作成します。
このモデルから多くの情報を得ることができました。しかし、Getter および Setter アクセス修飾子を見つける場所が見つかりません。これらは、edmx ファイルの CSDL 部分にあります。
例:
<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スキーマが読み込まれないため、これらのプロパティは無視されます。
しかし、誰かがこの情報を見つける方法を見つけるのを手伝ってくれることを願っています?