我读过很多关于流利NHibernate的ReferencesAny,但我还没有看到一个完整的例子。 我想我明白了大部分,但有一个部分我不明白。 在类映射ReferencesAny(x => x.MemberName)
用于定义所述一个或多个被引用类的关系。 什么是MemberName
? 它是如何定义的?它用于创建数据库中的数据。
我有三个表,在一个表中的记录可以在其他两个表的一个引用记录。 前两个是自动映射,所以Id字段没有特别限定。
public class Household
{
public virtual string Name { get; set; }
public virtual IList<AddressXref> AddressXrefs { get; set; }
}
public class Client
{
public virtual string Name { get; set; }
public virtual IList<AddressXref> AddressXrefs { get; set; }
}
我不知道如果AddressXref
表可自动映射。 如果是这样,我需要找出如何做到这一点。 现在我会做与流利的传统方式。
public class AddressXref
{
public virtual int id { get; set; }
public virtual string TableName { get; set; }
public virtual Int32 Table_id { get; set; }
public virtual string Street { get; set; }
public virtual string City { get; set; }
}
class AddressXrefMap : ClassMap<AddressXref>
{
public AddressXrefMap()
{
Table("AddressXref");
Id(x => x.id);
Map(x => x.TableName);
Map(x => x.Table_id);
Map(x => x.Street);
Map(x => x.City);
ReferencesAny(x => x.TableRef)
.AddMetaValue<Household>(typeof(Household).Name)
.AddMetaValue<Client>(typeof(Client).Name)
.EntityTypeColumn("TableName")
.EntityIdentifierColumn("Table_id")
.IdentityType<int>();
}
}
我需要的是怎样的帮助部分TableRef
中,提到ReferencesAny()
成员AddressXref
类中定义的?
此外,它是如何在代码中创建数据记录时使用? 我像这将是类似这样的:
Household Household = new Household();
Household.Name = "Household #1";
AddressXref AddrXref = new AddressXref();
AddrXref.Street1 = "123 Popular Street";
AddrXref.City = "MyTown";
AddrXref.TableRef = Household;
Session.SaveOrUpdate(AddrXref);
我喜欢用流利的与NHibernate,但我仍然在学习曲线赞叹不已。 :)
谢谢,拉斯