gpt4 book ai didi

c# - nHibernate (w/CaSTLe ActiveRecord) with C# interfaces (esp for DTO's)

转载 作者:行者123 更新时间:2023-11-30 15:50:28 25 4
gpt4 key购买 nike

有没有将 nHibernate 与从公共(public)接口(interface)实现的域对象和 DTO 对象一起使用?我试图将我所有的 nHibernate 属性分离到 Domain 对象中,让我的 DTO 和接口(interface)保持干净。

当 nHibernate 尝试将接口(interface)与具体类相关联时,问题会抛出错误。

NHibernate.MappingException:关联引用未映射的类:IContact

我理解为什么它提示使用非休眠界面,但我正在努力寻找一种围绕它进行重组的方法。我的代码的骨架复制如下,关于如何更好地构建我的代码的任何想法?

public interface ICompany
{
IList<IContact> Contacts { get; set; }
}

public class CompanyDTO : ICompany
{
private IList<IContact> contacts;
public IList<IContact> Contacts { get { return this.contacts; } set { this.contacts = value; } }

}

[ActiveRecord]
public class Company : ActiveRecordBase<Company>, ICompany
{
private IList<IContact> contacts;
[HasMany(Inverse=true, Table="Contact", ColumnKey="CompanyId")]
[ScriptIgnore]
public IList<IContact> Contacts { get { return this.contacts; } set { this.contacts = value; } }
}

编辑:

我想要一个通用的接口(interface),这样我就可以确保它们保持相同的字段(即依靠编译器来保持它们的一致性)。它还允许我在我的应用程序的 View 部分使用 DTO,但将它们转换为域对象以进行业务和数据访问。另外,alex 的解决方案不起作用,因为 ICompany 的联系人是 IList 类型,而不是 IList。我想将它保留为 IContact,因此我的 DTO 对象不知道 Contact Domain 对象。

最佳答案

在您的具体情况下,您应该将 Type = typeof(Contact) 添加到映射属性,如下所示:

[HasMany(Inverse=true, Table="Contact", ColumnKey="CompanyId", Type=typeof(Contact))]

关于c# - nHibernate (w/CaSTLe ActiveRecord) with C# interfaces (esp for DTO's),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/637380/

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