1

次のプロジェクトでは、このようなインターフェイスを使用する必要があります(サンプルコード)

public interface IFoo
{
    string Name {get; set;}
    IList<IBar> Bars {get; set;}
}

public interface IBar
{
    string Name {get;set;}
    IList<IFoo> Foos {get;set;
}


public class Foo : IFoo
{
    public string Name {get; set;}
    public IList<IBar> Bars {get; set;}
}

public class Bar : IBar
{
    public string Name {get; set;}
    public IList<IFoo> Foos {get;set;}
}

明らかに、アプリケーション層では、インターフェイスを使用したいと考えており、実装クラスについてはこれまで何も知りませんでした。

私はいくつかのOR/Mを見てきました-私たちは現在LLBLGenを所有しています、私はEntityFrameworkを試しました、そしてそれは悪夢でした、それも機能しませんでした、NHibernateを調べました、しかし開始手順がそうであるという事実LLBLGenに比べて複雑なため、私は怖がっていました(ただし、NHibernateが私のニーズをサポートしている場合は、引き続きNHibernateを利用できます)。

だから私が探しているのは:最小限のセットアップ要件で使用できる単純なOR / M(LLBLGenはツールを使用してDBをリバースエンジニアリングし、ソースコードを生成し、コーディングを開始できます)、構造をサポートしますその上。

補足:私が探しているパターンが何と呼ばれているのか誰か教えてもらえますか?(ウルトラスロスフル以外;))

4

2 に答える 2

1
// mappings
public class FooMap : ClassMap<Foo>
{
    public FooMap()
    {
        Map(f => f.Name);
        HasMany(f => f.Bars).KeyColumn("foo_Id");
    }
}

public class BarMap : ClassMap<Bar>
{
    public BarMap()
    {
        Map(f => f.Name);
    }
}

// query
var john = session.Query<IFoo>()
    .Where(f => f.Name == "John")
    .Fetch(f => f.Bars)
    .Single();

Console.Writeline(john.Bars.Count);
于 2013-02-11T19:30:59.783 に答える
0

LLBLGen Pro v3.xは、エンティティクラスのインターフェイスを生成でき(マクロで名前を指定し、プロジェクトレベルで定義できるため、まったく機能しません)、単純なテンプレートを使用して生成できます。インターフェイスも同様です。

ただし、複数のエンティティでインターフェイスを再利用していますか?その場合、おそらくインターフェースによってクエリを実行し、インターフェースを実装するすべてのタイプのすべてのインスタンスを取り戻したいと思うでしょう。すべてのORMがそれをサポートしているわけではありません(NHibernateはサポートしていると思いますが、私たち自身のランタイムとEFはサポートしていません)

于 2013-02-14T16:24:18.167 に答える