如何在Fluent NHibernate中映射IDictionary<string, Entity>

10
我有一个带有IDictionary的类。
  <map name="CodedExamples" table="tOwnedCodedExample">
    <key>
      <column name="OwnerClassID"/>
    </key>
    <index type="string" column="ExampleCode"/>
    <many-to-many class="CodedExample" column ="CodedExampleClassID"/>
  </map>

正如您所看到的,它使用一对多关系从其表中获取CodedExamples,使用tOwnedCodedExample表查找由OwnerClass拥有的哪些示例。

我意识到这是一种非常基本(并且希望是标准)的映射,但我很困惑,无法找到任何相关文档,因此非常感谢任何可能提供的帮助。

非常感谢。

Stu


3
不是重复的问题,两个问题是不同的。 - Paul Batum
2
谢谢,Paul,问题非常不同。我另一个问题是关于字典索引的复合键,这个 - 希望 - 是有关FluentNH中字典标准用法的一个更简单的问题。Paul,你知道怎么映射吗?我看过很多帖子说这是可能的,但没有一个指示如何做到! - Stu
2个回答

13

我有一个可行的例子,这应该能让你明白。

类:

public class Customer : Entity
{        
    public IDictionary<string, Book> FavouriteBooks { get; set; }
}

public class Book : Entity
{
    public string Name { get; set; }
}

然后是地图:

HasManyToMany<Book>(x => x.FavouriteBooks)
            .Table("FavouriteBooks")                
            .ParentKeyColumn("CustomerID")
            .ChildKeyColumn("BookID")
            .AsMap<string>("Nickname")                
            .Cascade.All();

生成的XML:

<map cascade="all" name="FavouriteBooks" table="FavouriteBooks" mutable="true">
  <key>
    <column name="`CustomerID`" />
  </key>
  <index type="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <column name="`Nickname`" />
  </index>
  <many-to-many class="Domain.Book, Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
    <column name="`BookID`" />
  </many-to-many>
</map>

生成的SQL语句:

create table "Customer" (
    "Id"  integer,
   "FirstName" TEXT,
   primary key ("Id")
)

create table FavouriteBooks (
    "CustomerID" INTEGER not null,
   "BookID" INTEGER not null,
   "Nickname" TEXT not null,
   primary key ("CustomerID", "Nickname")
)

create table "Book" (
    "Id"  integer,
   "Name" TEXT,
   primary key ("Id")
)

那看起来很不错,谢谢。明天我上班时会试一试,然后再回复你。 - Stu
谢谢Paul,那个完美地解决了问题。不幸的是,这个问题已经被关闭为重复问题,但希望它仍然会出现在搜索结果中,以便其他人可以将其用作示例。 干杯Stu - Stu

2

book.name作为键值,而不是昵称。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接