首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HasOne还是Reference?

HasOne还是Reference?
EN

Stack Overflow用户
提问于 2012-03-30 22:10:22
回答 2查看 701关注 0票数 1

我继承了一个数据库,并尝试将其映射到Fluent NHibernate。我有以下架构:

代码语言:javascript
复制
CREATE TABLE [Signatures](
    [Id] [int] IDENTITY(1,1) PRIMARY KEY CLUSTERED NOT NULL,
    -- Other Fields....
)

CREATE TABLE [SignoffSteps](
    [Id] [int] IDENTITY(1,1) PRIMARY KEY CLUSTERED NOT NULL,
    [SignatureId] [int] NULL REFERENCES [Signatures]([Id]),
    -- Other Fields....
)

我尝试将其映射到以下内容(省略了额外的属性和映射):

代码语言:javascript
复制
public class SignoffStep
{
    public virtual int Id { get; set; }
    public virtual Signature Signature { get; set;}

    public class Map : ClassMap<SignoffStep>
    {
        public Map()
        {
            Table("SignoffSteps");
            Id(x => x.Id);

            References(x => x.Signature, "SignatureId")
                .Nullable()
                .ForeignKey("FK_SingoffSteps_Signatures")
                .Cascade.All()
                .Not.LazyLoad();
        }
    }
}

public class Signature
{
    public virtual int Id { get; set; }

    public class Map : ClassMap<Signature>
    {
        public Map()
        {
            Table("Signatures");
            Id(x => x.Id);
        }
    }
}

这很有效,除了一个恼人的地方:删除签名。如果我手动删除签名,我可以让它工作:

代码语言:javascript
复制
session.Delete(signoffStep.Signature);
signoffStep.Signature = null;

但是我想要做的就是将signoff步骤中的Signature属性设置为null,并让NHibernate自动删除该子元素。有没有一种方法可以设置我的映射来做到这一点?

编辑:将级联设置为"all-delete-orphan“不可行:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-10 22:05:01

我最终在签名上有了一个"ToDelete“属性,并在保存时手动删除了它们。我不喜欢这个b/c,它打破了抽象,但现在可以用了。

我认为要想真正修复它,我必须重做一些表和关联。不幸的是,在这种情况下,这是不可能的。

票数 0
EN

Stack Overflow用户

发布于 2012-04-02 23:55:48

尝试将级联设置更改为"all-delete-orphan“。当前您正在级联除删除之外的所有内容,这意味着当您尝试创建“孤立”记录时,DB将发出警告。通过告诉NHibernate如何处理这个问题(在update或delete操作之后删除被引用表中的任何孤立记录),就可以避免这个问题。

请理解,为了让NH的级联工作,引用表的FK必须是可空的,以便NH可以在第一次传递中将其设置为null (孤立记录)。AFAIK,NH目前不提供使用不可为空的FK级联删除子记录的方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9944611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档