修改
嗨,尝试编辑以解答此问题。为了尝试改进这个问题,这里有一个直接到点的浓缩版本:
在使用流畅的nhibernate将值对象映射到单独的表时,代码是否可以使用,还是有替代方法?
您好,
出于这个问题的目的,我正在使用流利配置的nhibernate。
我正在稳步学习DDD,但在对值对象的映射进行了一些澄清之后。似乎有很多关于将值对象映射为组件的信息。但是我想在某些情况下规范化我的数据库,因此会给值对象一个持久性标识(如果我是正确的,不违反DDD值对象规则)。
我在SO上看过this问题,但想了解更多有关如何设置和映射实际值对象的信息。
将值对象映射到表示实体的表时,我感到很自在。例如,将地址值对象作为组件映射到customer表中。
我的查询在于映射我想要放在单独表中的值对象。是否使用类似下面的类映射来映射值对象的最佳方法?我计划忽略它,它纯粹存在于nhibernate持久性中。
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);
}
}
提前致谢。
答案 0 :(得分:1)
我的建议是你应该使用Fluent NHibernate的自动映射功能,就像他们在Sharp Architecture项目中那样。
我已经在几个项目中使用了它,它使你能够更专注于域,而不用担心持久性。
例如,取自here:
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进行集成测试。
看看它。无论如何,这对我来说非常有用。