【发布时间】:2010-10-14 21:29:31
【问题描述】:
我刚切换到 Fluent NHibernate,遇到了一个问题,没有找到任何相关信息。
情况是这样的:
public class Field : DomainObject, IField
{
public Field()
{
}
public virtual string Name { get; set; }
public virtual string ContactPerson { get; set; }
public virtual bool Private { get; set; }
public virtual IAddress Address { get; set; }
}
IAddress 是一个由Address 类实现的接口
public class Address : DomainObject, IAddress
{
public Address()
{
}
public virtual string City { get; set; }
public virtual string Country { get; set; }
public virtual string PostalCode { get; set; }
public virtual string StreetAddress { get; set; }
}
这是我的两个类的映射文件
地址
public class AddressMap : ClassMap<Address>
{
public AddressMap()
{
WithTable("Addresses");
Id(x => x.Id, "Id").Access.AsCamelCaseField(Prefix.Underscore).GeneratedBy.Guid();
Map(x => x.City, "City");
Map(x => x.Country, "Country");
Map(x => x.PostalCode, "PostalCode");
Map(x => x.StreetAddress, "StreetAddress");
}
}
字段
public class FieldMap : ClassMap<Field>
{
public FieldMap()
{
WithTable("Fields");
Id(x => x.Id, "Id").Access.AsCamelCaseField(Prefix.Underscore).GeneratedBy.Guid();
Map(x => x.Name, "Name");
Map(x => x.ContactPerson, "ContactPerson");
Map(x => x.Private, "Private");
References(x => x.Address, "AddressId").Cascade.Delete().Cascade.SaveUpdate();
}
}
因此,当我尝试从数据库中检索字段对象时,我收到 NHibernate 错误,指出 IAddress 未映射。有什么方法可以指定 NHibernate 在映射中使用 Address 类?
如果需要更多信息,请告诉我。
非常感谢,
查尔斯
【问题讨论】:
-
如何在数据库中对 IAddress 层次结构进行建模?每个层次结构的表(一个包含所有类型地址的表),还是每个具体类的表?您说您切换到 Fluent,因此发布示例 XML 映射可能有助于确定您要完成的工作。
-
事实上,我使用 Fluent NHibernate 从 ADO.NET Entity Framework 切换到了 Nhibernate。在我的数据库中,有一个包含所有类型地址的表。顺便说一句,我决定删除那些接口,我意识到它没有用。但我认为这个问题仍然有效。谢谢,查尔斯
标签: c# nhibernate interface mapping fluent