【问题标题】:How to create mapping relationship using Fluent NHibernate如何使用 Fluent NHibernate 创建映射关系
【发布时间】:2011-12-01 02:57:23
【问题描述】:

如何映射一对多关系 用户地址, 客户地址, 机构地址和 使用 Fluent NHibernate 存储在单个地址表中

public class User
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual IList<Address> Address { get; set; }
}
public class Customer
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual IList<Address> Address { get; set; }
}
public class Agency
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual IList<Address> Address { get; set; }
}
public class Address
{
    public virtual int Id { get; set; }
    public virtual string Address1 { get; set; }
    public virtual string Address2 { get; set; }
    public virtual string City { get; set; }
    public virtual string State { get; set; }
}

【问题讨论】:

    标签: nhibernate fluent-nhibernate mapping


    【解决方案1】:

    如果您希望能够对所有类型使用相同的地址,我认为您需要独立存储您的关系以连接地址和用户/客户/代理。这涉及引入一个仅存储 ID 对的新表,并将其作为关系的存储位置。

    您可以将集合映射为多对多,并使用 table 方法来命名您的链接表。您的映射如下所示:

    public UserMap : ClassMap<User> {
      Id (u => u.Id);
      Map (u => u.Name);
      HasManyToMany (u => u.Addresses).Table ("UsersXAddresses");
    }
    

    您需要一个类似的客户和代理链接表。

    【讨论】:

    • 您能告诉我更多关于如何在地址列表、用户和用户XAddresses 之间进行映射的信息吗?一些示例地图会很有帮助。
    • 您的其他课程需要相同的地图,但名称不同。 Address 只是对各自属性的 Id 和 Map 的调用。
    【解决方案2】:

    在映射类的构造函数中,使用HasMany 方法映射链接。 HasMany 将创建 一对多 关系。 HasManyToMany 将创建一个多对多关系。

    例如: HasMany(x =&gt; x.Address).LazyLoad();

    这将在User 类和Address 类之间创建一对多关系。

    对于多对多,您还需要指定表名,如果您愿意,还需要指定左右表映射。

    例如: HasManyToMany(x =&gt; x.Address).Table("AddressToUser").ParentKeyColumn("AddressId").ChildKeyColumn("UserId").LazyLoad();

    如果您决定要在 UserAddressAgencyAddress 之间设置区别(这些是地址的子类) - 您可以在 AddressMap 类中使用 DiscriminateSubClassesOnColumn 方法,以便FNH 知道要创建一个额外的列以确定要创建的对象类型。

    例如: DiscriminateSubClassesOnColumn("Type").AlwaysSelectWithValue();

    【讨论】:

      【解决方案3】:

      您应该能够使用FNH Automapping“按原样”映射这些类。

      它将处理您的对象模型中的所有关系。

      我相信它会根据您的需要将所有地址放在一个地址表中,但不能确定。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-10
        • 1970-01-01
        • 2011-07-11
        • 1970-01-01
        相关资源
        最近更新 更多