【问题标题】:Fluent NHibernate Relation Without Foreign Key没有外键的流畅的 NHibernate 关系
【发布时间】: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,你是对的,我实际上并没有传递一个空值(相反,我用它的所有值 0null 实例化了一个 DocumentType,我觉得很愚蠢,1浪费了一天。把它作为答案,我会接受的。
  • 别担心,我们每个人都会遇到这种情况

标签: c# nhibernate fluent-nhibernate


【解决方案1】:

我猜保存时属性 DocumentType 并不是真的为空。 似乎有一个实例,并且引用上没有 Cascade.All() 无法保存。

【讨论】:

    猜你喜欢
    • 2011-05-28
    • 2012-09-05
    • 2010-11-23
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多