1

T4 を使用して、次のコードを生成しようとしています。

public virtual IList<Frequency> GetAll()
    {
        using (var wc = new WCDataClassesDataContext())
        {
            return wc.Frequencies.ToList();
        }
    }

    public virtual IList<Frequency> GetAll(Expression<Func<Frequency, bool>> whereClause)
    {
        using (var wc = new WCDataClassesDataContext())
        {
            return wc.Frequencies.Where(whereClause).ToList();
        }
    }

T4で私は使用しています:

foreach (var entity in typeMapper.GetItemsToGenerate<EntityType>(itemCollection))
{
    fileManager.StartNewFile(entity.Name + "BaseFinder.cs");
    BeginNamespace(code);
 #>

<#=codeStringGenerator.UsingDirectives(inHeader: false)#>
using System.Linq;
using System.Linq.Expressions;
<#=codeStringGenerator.EntityClassOpening(entity)#>
{

    public virtual IList<<#=entity.Name #>> GetAll()
    {
        using (var wc = new WCDataClassesDataContext())
        {
            return wc.[[Frequencies]].ToList();
        }
    }

    public virtual IList<<#=entity.Name #>> GetAll(Expression<Func<<#=entity.Name #>, bool>> whereClause)
    {
        using (var wc = new WCDataClassesDataContext())
        {
            return wc.[[Frequencies]].Where(whereClause).ToList();
        }
    }

......
}

[[Frequency]] の代わりに、エンティティがマップされているメイン テーブル名が必要です。クラスで簡単に使用できるさまざまなゲッターをセットアップしようとしています。

これを行うための解決策は何ですか、またはこれを行う他の方法がある可能性があることを教えてください。

あなたが私の主張を理解してくれることを願っています。

ありがとう。

4

1 に答える 1

0

エンティティ タイプが既にあるように見えるので、近いと思います。関係の多重度が多数あるナビゲーション プロパティを取得するだけで、設定する必要があります。

何かのようなもの:

EntityType et = entity.GetType();
foreach(var navProp in et.NavigationProperties.Where(np=>np.DeclaringType == et 
        && np.RelationshipMultiplicity == RelationshipMultiplicity.Many))
{
    string s = string.Format("public virtual IList<{0}> GetAll() ...", 
                           navProp.ToEndMember.GetEntityType().Name);

}

Entity Framework の DB ファースト ジェネレーターは、既にこのような機能を備えています。EDMX の下を掘り下げると、*.Context.ttまたは同様のものが表示されるはずです。そこで、 を検索してくださいNavigationProperty。似たようなものを生成するコード文字列ヘルパー メソッドがあります。

于 2013-03-27T23:38:24.750 に答える