1

次のようなクラスがあります。

public class Competitor
{
    public virtual int CompetitorId { get; set; }
    public virtual string FirstName { get; set; }
    public virtual string LastName { get; set; }

    public virtual IEnumerable<string> SportsCompeted { get; set; }
}

SportsCompeted次のように解決されたSportID(文字列)のリストです。

SELECT DISTINCT SportID FROM results WHERE competitorId = xxx

そのようなものをマッピングするにはどうすればよいですか?
HasManyを見ると、Where句を指定できますが、この場合、それが私が探しているものではないと思いますか?

簡潔にするために省略したFluentMappingsを使用しています。

4

2 に答える 2

1

でこれができるはずです.Element()。何かのようなもの:

HasMany(x => x.SportsCompeted)
    .KeyColumn("CompetitorId")
    .Element("SportID") // You can define element type as second parameter
    .Table("results");

詳細:リスト<string>の
NHibernate
Fluent NHIbernate自動マッピングを使用した文字列のマッピングコレクション?


編集:

Result代わりにあなたとSportエンティティがあるとしましょう:

public class Sport
{
    public virtual int SportId { get; set; }
    // Other properties
}

public class Result : Entity
{
    public virtual ResultId { get; set; }
    public virtual Competitor Competitor { get; set; }
    public virtual Sport Sport { get; set; }
    // Other properties
}

public class Competitor
{
    public virtual int CompetitorId { get; set; }
    public virtual IList<Result> Results { get; set; }
    // Other properties
}

これHasManyで、次のようになります。

// For this, you would need to have Result and Sport classes mapped
// This property isn't necessary for your Sports Competed query
HasMany(x => x.Results)
    .KeyColumn("CompetitorId")
    .Table("results");

次に、ieを使用できます。必要な結果を得るためのLinq:

var sports = session.Query<Result>()
    .Where(x => x.Competitor.CompetitorId = competitorId)
    .Select(x => x.Sport) // Or .Select(x => x.Sport.SportId)
    .Distinct();
于 2012-07-02T16:37:08.160 に答える
0

私がやったことは、基本的に次のことを行うためにSQLでビューを作成することでした。

SELECT DISTINCT SportID, CompetitorID FROM results

次に、私のマッピングでは:

HasMany(x => x.CompetitorDisciplines)
    .Not.LazyLoad()
    .Inverse()
    .AsBag()
    .KeyColumn("competitorId")
    .Element("DisciplineCode")
    .Table("vCompetitorDisciplines");

それは望ましい結果を生み出すようでした。
遅いですが、1回(または1日1回)の操作です。

于 2012-07-03T15:37:31.393 に答える