Fluent nhibernate 有一个或多个推荐人?

Fluent nhibernate 有一个或多个推荐人?,fluent-nhibernate,fluent-nhibernate-mapping,Fluent Nhibernate,Fluent Nhibernate Mapping,我继承了一个数据库,我正试图将它映射到Fluent NHibernate。 我有以下模式: 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,

我继承了一个数据库,我正试图将它映射到Fluent NHibernate。 我有以下模式:

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....
)
我正试图将其映射到以下内容 (省略了额外的属性和映射):

但我想做的只是将signoff步骤上的Signature属性设置为null,并让NHibernate自动删除子项。有没有办法设置我的映射来实现这一点

编辑:无法将级联设置为“全部删除孤立项”:

尝试将级联设置更改为“全部删除孤立项”。目前,您正在级联除删除之外的所有内容,这意味着当您尝试创建“孤立”记录时,DB将发出抱怨。通过告诉NHibernate如何处理此问题(在更新或删除操作后删除引用表中的任何孤立记录),可以避免此问题


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

尝试将级联设置更改为“全部删除孤立项”。目前,您正在级联除删除之外的所有内容,这意味着当您尝试创建“孤立”记录时,DB将发出抱怨。通过告诉NHibernate如何处理此问题(在更新或删除操作后删除引用表中的任何孤立记录),可以避免此问题

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

我在签名上有一个“ToDelete”属性,并在保存时手动删除它们。我不喜欢这种b/c模式,它打破了抽象概念,但它现在可以工作了

我想,要想真正解决这个问题,我必须稍微重做一下表和关联。不幸的是,在这种情况下,这是不可能的

我在签名上有一个“ToDelete”属性,并在保存时手动删除它们。我不喜欢这种b/c模式,它打破了抽象概念,但它现在可以工作了


我想,要想真正解决这个问题,我必须稍微重做一下表和关联。不幸的是,在这种情况下,这是不可能的

在上面添加了编辑。级联所有删除孤儿是不可能的引用关系,我认为这是只有在HasMany.Added编辑上面。使用引用关系不可能级联所有删除孤立项,我认为这仅适用于HasMany。
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);
        }
    }
}
session.Delete(signoffStep.Signature);
signoffStep.Signature = null;