代码之家  ›  专栏  ›  技术社区  ›  Stu

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

  •  10
  • Stu  · 技术社区  · 15 年前

    我有一节课上有一本词典。

      <map name="CodedExamples" table="tOwnedCodedExample">
        <key>
          <column name="OwnerClassID"/>
        </key>
        <index type="string" column="ExampleCode"/>
        <many-to-many class="CodedExample" column ="CodedExampleClassID"/>
      </map>
    

    如您所见,它使用多对多从表中获取codedexample,使用tOwnedCodedExample表查找属于OwnerClass的代码。

    我意识到这是一个非常基本的(希望是标准的)映射,但我很挣扎,找不到任何文档,因此将非常感谢任何可能的帮助。

    斯图

    2 回复  |  直到 7 年前
        1
  •  13
  •   Paul Batum    15 年前

    我有一个工作的例子,这应该让你明白。

    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")
    )
    
        2
  •  2
  •   ryanyuyu    10 年前

    绘制 book.name