我需要逐一进行映射,我有些疑惑。我有这个课程:
public class DocumentType {
public virtual int Id { get; set; }
/* othes properties for documenttype */
public virtual DocumentConfiguration Configuration { get; set; }
public DocumentType () { }
}
public class DocumentConfiguration {
public virtual int Id { get; set; }
/* some other properties for configuration */
public virtual DocumentType Type { get; set; }
public DocumentConfiguration () { }
}
DocumentType对象只有一个DocumentConfiguration,但它不是一个继承,它只是一个一个且唯一的,用于分隔属性。
在这种情况下,我的映射应该如何?我应该使用References还是HasOne?有人可以举个例子吗?
当我加载DocumentType对象时,我想自动加载属性Configuration(在documentType中)。
非常感谢你们!
干杯
答案 0 :(得分:0)
如果这种关系真的是一对一的......那么使用HasOne: - )
见http://nhibernate.info/doc/nhibernate-reference/mapping.html#mapping-declaration-onetoone。它有你需要知道的一切。
答案 1 :(得分:0)
即使您的域中有一对一,您的关系模型也可能是一对多的。我怀疑你在两个表上共享相同的PK,更有可能你在DocumentConfiguration for DocumentType上有FK。在这种情况下,您可以将其映射为这样,因为您映射的是您的关系模型。所以在DocumentType上它将是HasOne.Inverse.AllDeleteOrphan ...而在DocumentConfiguration上它将是“References”。
现在,域名应该在您描述时公开它。
public class DocumentConfiguration
{
public DocumentConfiguration()
{
_internalDocumentConfigurations = new List<DocumentConfiguration>(1);
}
private IList<DocumentConfiguration> _internalDocumentConfigurations
public virtual DocumentType Type
{
get
{
return _internalDocumentConfigurations.FirstOrDefault();
}
/**/WARNING - no setter here**
}
public virtual SetDocumentConfiguration(DocumentConfiguration config)
{
//add your asserts here
Add(config);
}
private virtual Add (DocumentConfiguration config)
{
//add your asserts here
_internalDocumentConfigurations.Add(config)
config.DocumentType = this;
}
public virtual Remove (DocumentConfiguration config)
{
_internalDocumentConfigurations.Remove(config)
config.DocumentType = null;
}
}
public class DocumentConfiguration {
public virtual int Id { get; set; }
/* some other properties for configuration */
public virtual DocumentType Type { get; protected internal set; }