DDD - 使用Fluent nHibernate在单独的表中映射值对象

编辑: 嗨,尝试编辑以回答这个问题。为了尝试改进问题,这里是一个直接到点浓缩版本: 当使用流畅的nhibernate将值对象映射到单独的表时,代码是否可行,或者有替代方法吗? 嗨, 出于这个问题的目的,我使用nhibernate流利配置。 我正在稳步学习DDD,但在对值对象的映射进行了一些澄清之后。似乎有很多关于将值对象映射为组件的信息。但是,我想在某些情况下规范化我的数据库,因此会给值对象一个持久性标识(如果我是正确的,则不违反DDD值对象规则)。 我在SO上看过这个问题,但是想了解如何设置和映射实际值对象的更多信息。 将值对象映射到表示实体的表时,我感到很自在。例如,将地址值对象作为组件映射到customer表中。 我的查询在于映射我想要放在单独的表中的值对象。是否使用类似下面的类映射来映射值对象的最佳方法?我计划忽略它纯粹存在于nhibernate持久性的Id。
public class Address
{
  protected virtual int id {get;}
  public virtual string firstLine {get;}
  public virtual string city {get;}
  public virtual string postcode {get;}
}

public class AddressMap : ClassMap<Address>
{
  public AddressMap()
  {
    Id(x => x.Id);
    Map(x=> x.firstline);
    Map(x=> x.city);
    Map(x=> x.postcode);
  }
}
提前致谢。     
已邀请:
我的建议是你应该使用Fluent NHibernate的自动映射功能,就像他们在Sharp Architecture项目中那样。 我已经在几个项目中使用了它,这使你能够更专注于域,而不用担心持久性。 举个例子,取自这里:
public class CustomerMap : IAutoMappingOverride<Customer>
{
    public void Override(AutoMapping<Customer> mapping) {
        mapping.Not.LazyLoad();
        mapping.Id(x => x.Id, "CustomerID")
            .GeneratedBy.Assigned();

        mapping.HasMany(hm => hm.Orders).KeyColumn("CustomerID");
    }
}
如您所见,它们仅指定Id属性和Order的映射,并按惯例映射所有其他属性。实际上,甚至可以使用约定来映射Id。 这个非常棒的功能是您可以从您的域生成数据库架构。这使您能够使用SQLite进行集成测试。 看看它。无论如何,它对我来说非常有用。     

要回复问题请先登录注册