NHibernate单向关联

时间:2011-09-02 18:23:54

标签: nhibernate fluent-nhibernate nhibernate-mapping associations

使用Fluent NHibernate的Getting Started项目。我试着稍微定制一下这个例子,原因有几个,其中就是消除了json序列化的循环引用。

我所做的是将其StoreStoreMap类的引用删回EmployeeProduct类。它现在看起来像这样:

商品/ StoreMap

public class Store
{
   public virtual int Id { get; private set; }
   public virtual string Name { get; set; }
}
public StoreMap()
{
   Id(x => x.Id);
   Map(x => x.Name);
}

雇员/ EmployeeMap的

public class Employee
{
  public virtual int Id { get; private set; }
  public virtual string FirstName { get; set; }
  public virtual string LastName { get; set; }
  public virtual Store Store { get; set; }
}

public class EmployeeMap : ClassMap<Employee>
{
  public EmployeeMap()
  {
    Id(x => x.Id);
    Map(x => x.FirstName);
    Map(x => x.LastName);
    References(x => x.Store).Cascade.All();
  }
}

产品/ ProductMap

public class Product
{
  public virtual int Id { get; private set; }
  public virtual string Name { get; set; }
  public virtual double Price { get; set; }
  public virtual IList<Store> StoresStockedIn { get; private set; }

  public Product()
  {
    StoresStockedIn = new List<Store>();
  }

  public virtual void StockAt(Store store)
  {
    StoresStockedIn.Add(store);
  }
}

public class ProductMap : ClassMap<Product>
{
  public ProductMap()
  {
    Id(x => x.Id);
    Map(x => x.Name);
    Map(x => x.Price);
    HasManyToMany(x => x.StoresStockedIn)
      .Cascade.All()
      .Table("StoreProduct");
  }
}

我已将“级联”操作移至ProductEmployee而非Store。从我做过的测试来看,HasMany和HasManyToMany协会似乎都工作正常。

我的问题是,这是否是正确的方法。是否会导致我没有预料到的东西。

1 个答案:

答案 0 :(得分:0)

据我所知,nHibernate中的标准做法是在模型类中建立关系的两端(实际上,从业务角度来看,它通常是有意义的)。
虽然你不必须这样做(你的例子,我认为,应该可以正常工作) 如果您不想公开一个(或两个)结束,则可以始终将它们定义为私有或受保护。

关于json序列化的p.s:不建议序列化模型实体。这有几个原因,最重要的原因是:
1.您向用户显示的数据可能与您实体中的数据不同(例如,您可能希望向员工显示其姓名,身份证,商店名称和他们拥有的产品数量。这将很难使用你的模型类来做到这一点) 2.很可能你的对象中有未初始化的集合(如果你使用延迟加载)。这些被序列化。

对于序列化,建议使用DTO。