2010-02-12 29 views
10

thể trùng lặp:
Use Component as IDictionary index in AsMap in Fluent NhibernateLàm thế nào để lập bản đồ IDictionary <string, Entity> trong thành thạo NHibernate

Hi,

Tôi có một lớp học với một IDictionary trên đó.

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

như bạn có thể nhìn thấy nó sử dụng một nhiều-nhiều để có được những CodedExamples từ bảng của họ bằng cách sử dụng bảng tOwnedCodedExample để tìm được sở hữu bởi các OwnerClass.

Tôi nhận ra rằng đây là bản đồ rất cơ bản (và hy vọng tiêu chuẩn) nhưng đang gặp khó khăn và không thể tìm thấy bất kỳ tài liệu nào cho nó, do đó sẽ rất biết ơn bất kỳ sự trợ giúp nào có thể.

Nhiều Cảm ơn

Stu

+3

Nó không phải là bản sao. Các câu hỏi khác nhau. –

+2

Cảm ơn Paul, các câu hỏi rất khác nhau. Câu hỏi khác của tôi là về một khóa tổng hợp cho chỉ mục từ điển, điều này - tôi hy vọng - là một câu hỏi đơn giản hơn nhiều về việc sử dụng tiêu chuẩn từ điển trong FluentNH. Paul, bạn có biết cách lập bản đồ này không? Tôi đã nhìn thấy rất nhiều bài viết nói rằng nó có thể nhưng không ai cho thấy như thế nào! – Stu

Trả lời

13

Tôi có một ví dụ làm việc, điều này sẽ làm cho nó rõ ràng cho bạn.

Lớp học:

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

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

Và sau đó bản đồ:

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

Kết quả 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> 

tạo 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") 
) 
+0

Điều đó có vẻ rất tuyệt. Tôi sẽ cho nó đi vào ngày mai khi tôi vào văn phòng và lấy lại cho bạn. – Stu

+0

Cảm ơn Paul, đã làm việc hoàn hảo. Rất tiếc, câu hỏi này đã bị đóng dưới dạng bản sao, nhưng hy vọng câu hỏi đó vẫn sẽ xuất hiện trong kết quả tìm kiếm để người khác có thể sử dụng câu hỏi đó làm ví dụ. Chúc mừng Stu – Stu

2

Bản đồ số book.name làm khóa thay vì biệt hiệu.

Các vấn đề liên quan