【发布时间】:2013-07-01 14:03:08
【问题描述】:
我正在尝试简化我的问题,但基本上我正在尝试映射 2 个实体,但是我在数据库集中没有外键,因为该列可能为空。当我尝试对父级进行插入时,出现以下错误:
对象引用了一个未保存的瞬态实例 - 保存瞬态 刷新之前的实例或将属性的级联操作设置为 可以让它自动保存的东西。
这是我目前所拥有的:
我的实体
public class DocumentDraft
{
public virtual Guid Id { get; set; }
public virtual string Subject { get; set; }
public virtual string ReferenceNo { get; set;}
public virtual DocumentType DocumentType { get; set; }
}
public class DocumentType
{
public virtual short Id { get; set; }
public virtual string Description { get; set; }
}
映射
public class DocumentDraftMap : ClassMap<DocumentDraft>
{
public DocumentDraft()
{
// other mappings ...
References(x => x.DocumentType)
.Columns("DocumentTypeId")
.Nullable()
.Not.LazyLoad()
.NotFound.Ignore(); // <-- added this since the value could be null and it throws an error
}
}
我尝试在映射中指定Cascade.None(),但得到了相同的结果。基本上发生的情况是尝试将null 值插入DocumentType,而我不希望这样(我想在父表中插入null,但我不想触摸子表完全,我不希望它级联)。
我也试过:.Not.Insert(),但这也没有用。
如果有人能帮我解决这个问题,我将不胜感激。
【问题讨论】:
-
保存时确定属性 DocumentType 为空?似乎有一个实例,并且在引用上没有 cascade.All() 它无法保存。
-
@Firo 保存的时候是null,这就是问题所在,我想让它在数据库中保存为null,我整天都在扯头发。有时 NHibernate 会很烦人,我得告诉你。
-
@Firo 我也稍微编辑了我的问题,因为它有点误导。我想更新父表而不是子表(不希望它级联)。
-
@Firo,你是对的,我实际上并没有传递一个空值(相反,我用它的所有值
0或null实例化了一个DocumentType,我觉得很愚蠢,1浪费了一天。把它作为答案,我会接受的。 -
别担心,我们每个人都会遇到这种情况
标签: c# nhibernate fluent-nhibernate