gpt4 book ai didi

nHibernate 将实体映射到多个不同的父实体(例如,地址 -> 公司、地址 -> 客户端)

转载 作者:行者123 更新时间:2023-12-01 04:42:44 29 4
gpt4 key购买 nike

有人可以帮助我以最佳方式在流畅的 nHibernate 中映射以下情况吗? Address 类用于 Client 和 Company。如何在 SQL 中最有效地存储它?映射应该是什么样的?我已经考虑过多种选择,但是对于这些情况,我对 nHibernate 的经验不足:

  • 使用 1 个地址实体和 1 个表,并使用分母列来区分客户地址和公司地址-> 如何在 nHibernate 中实现这一点?
  • 使用 1 个地址实体和 2 个表(ClientAddresses 和 CompanyAddresses)--> 但我只能在类 Address
  • 的映射中定义 1 个表
  • 使用 2 个地址实体和 2 个表 --> 不太优雅

  • 当我开始实现 company 类并意识到它也需要多个地址时,我偶然发现了这个问题。到目前为止,我有一个 Address 和 Client 类,并且它们之间有一个一对多的映射。在数据库中,地址有一个名为 ClientId 的额外列。但是在介绍 Company 类(class)时,我被卡住了......

    任何帮助将不胜感激。

    我目前正在使用sharparch 1.5框架,它使用自动映射,我的映射文件是这样的:
    public class AddressMap : IAutoMappingOverride<Address>
    {
    public void Override(AutoMapping<Address> mapping)
    {
    mapping.Table("addresses");
    mapping.Id(x => x.Id, "AddressGuid")
    .UnsavedValue(Guid.Empty)
    .GeneratedBy.GuidComb();

    mapping.References(x => x.Client, "ClientGuid");

    }
    }

    下面更多的代码说明了问题:

    地址
    public class Address
    {
    public virtual string StreetLine1 { get; set; }
    public virtual string StreetLine2 { get; set; }
    public virtual string PostalCode { get; set; }
    public virtual string City { get; set; }
    public virtual string Country { get; set; }
    }

    其中有下表:

    tablename = addresses
    fields= AddressGuid, StreetLine1, StreetLine2, PostalCode, City, Country



    客户
    public class Client
    {
    public IList<Address> Addresses {get;set;}
    }

    公司
    public class Company
    {
    public IList<Address> Addresses {get;set;}
    }

    最佳答案

    看起来您可以使用 nHibernate 的 <any> 实现 #1映射。请注意,在这种情况下,您不能指定外键约束。

    an example of <any>

    Fluent nHibernate syntax

    关于nHibernate 将实体映射到多个不同的父实体(例如,地址 -> 公司、地址 -> 客户端),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2759954/

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