簡體   English   中英

流利的nHibernate,迷惑

[英]Fluent nHibernate , IDictionary Confusion

使用以下類。

public class Trait
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
}
public class Sheet
{
    public virtual int Id { get; set; }
    public virtual IDictionary<Trait, int> Influences { get; set; }
}

我已經嘗試使用Fluent nHibernate映射它們。

public class TraitMap : ClassMap<Trait>
{
    public TraitMap()
    {
        Id(x => x.Id);
        Map(x => x.Name);
        Table("Traits");
    }
}
public class SheetMap : ClassMap<Sheet>
{
    public SheetMap()
    {
        Id(x => x.Id);

        HasManyToMany<Trait>(x => x.Influences)
            .Schema("Sheets")
            .Table("Influences")
            .ParentKeyColumn("Trait")
            .ChildKeyColumn("Sheet")
            .AsMap<int>("Rating")
            .Cascade.All();

        Table("Sheets");
    }
}

這是行不通的。 我例外。

Trait.Id發生異常吸氣劑

現在,如果我將字典更改為這樣。

public class Sheet
{
    public virtual int Id { get; set; }
    public virtual IDictionary<int, Trait> Influences { get; set; }
}

基本上將int設為Key,將Trait設為值(不是我想要的值),它確實可以工作。 誰能解釋一下,我如何更恰當地重現我想做的事情?

我認為這是因為當我指定HasManyToMany<Trait>我是在指定集合的​​Value元素。 但是,這不是我的意圖。

我想通過鍵的名稱而不是值的名稱來查找內容。 盡管我意識到從技術上講這是一個“可接受的”解決方案,但它與Dictionary約定背道而馳。 如果可能的話,我寧願對解決方案方法采取更常規的做法-而且我想更好地了解幕后的實際情況。

您想要的是hbm中的<composite-index>映射會給您帶來什么。 我相信,而不是AsMap ,你想要AsEntityMap 但是, 請看一下該線程該線程討論了8月份對Maps的流暢映射的重寫(八月份),這使得上述所有操作都已過時。

編輯 :對於AsEntityMap和其他選項,看看這個SO問題 和答案

  HasMany<Trait>(x => x.Influences)
    .KeyColumn("key column name")
    .AsEntityMap("referenced column name")
    .Entity("dict value", v=> v.Type<int>());

另外,您說的是最新版本-最新版本是1.1,但主干是2.0,並且有很大的不同,而且還有很多。 如果您使用的不是2.0+,則不會在大多數幫助線程中看到發布的方法,例如上面鏈接的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM