gpt4 book ai didi

c# - 流利的 NHibernate,使用接口(interface)

转载 作者:IT王子 更新时间:2023-10-29 04:09:36 24 4
gpt4 key购买 nike

我刚切换到 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 的类实现的接口(interface)

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 类吗?

如果需要更多信息,请告诉我。

非常感谢,

查尔斯

最佳答案

我发现使用接口(interface)而不是具体类作为属性是有正当理由的。

例如,如果您的 Field 类位于 Address 类的单独项目中,并且您不依赖于 Field 类的项目中的 Address 类的项目。

还有其他方法可以处理这种情况,但最简单的方法通常是尝试您正在做的事情并明确告诉 NHibernate 要用于 IAddress 的具体类。

您现在可以在 Fluent NHibernate 中执行此操作,如下所示:

References(x => x.Address, "AddressId")
.Class(typeof(Address);

不幸的是,您不能使用 HasMany 或 HasManyToMany 执行此操作。由于 C# 中缺乏良好的协方差支持,我不确定这是否可行。

关于c# - 流利的 NHibernate,使用接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/672032/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com