Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用fluent nhibernate进行级联删除_C#_Postgresql_Fluent Nhibernate_Nhibernate Mapping - Fatal编程技术网

C# 使用fluent nhibernate进行级联删除

C# 使用fluent nhibernate进行级联删除,c#,postgresql,fluent-nhibernate,nhibernate-mapping,C#,Postgresql,Fluent Nhibernate,Nhibernate Mapping,我有一个映射,如下所示: public class InvoiceDetailMapping : ClassMap<InvoiceDetail> { public InvoiceDetailMapping() { Id(x => x.DetailId) .GeneratedBy.Guid(); Map(x => x.Account); Map(x => x.Credit);

我有一个映射,如下所示:

public class InvoiceDetailMapping : ClassMap<InvoiceDetail>
{
    public InvoiceDetailMapping()
    {
        Id(x => x.DetailId)
            .GeneratedBy.Guid();

        Map(x => x.Account);
        Map(x => x.Credit);
        Map(x => x.Debit);
        Map(x => x.PayType);
        Map(x => x.RowNumber);

        References<InvoiceItem>(x => x.Invoice, "InvoiceItemId")
            .Cascade.All();

    }
}

public class InvoiceItemMapping : ClassMap<InvoiceItem>
{
    public InvoiceItemMapping()
    {
        Id(x => x.RecordId)
            .GeneratedBy.Guid();

        Map(x => x.BatchId);
        Map(x => x.Description);
        Map(x => x.DocumentDate);
        Map(x => x.DocumentId);
        Map(x => x.DocumentType);
        Map(x => x.FileId);
        Map(x => x.FileName);
        Map(x => x.InvoiceAmount);
        Map(x => x.LocationCode);
        Map(x => x.PayDate);
        Map(x => x.PaymentTerms);
        Map(x => x.PayNumber);
        Map(x => x.PurchaseAmount);
        Map(x => x.PurchaseInvoiceAmount);
        Map(x => x.InvoiceId);
        Map(x => x.Submittable);
        Map(x => x.SubmittedBy);
        Map(x => x.SubmittedTimeStamp);
        Map(x => x.TaxForm1099Amount);
        Map(x => x.TroubleClass);
        Map(x => x.VendorDocNumber);
        Map(x => x.VendorId);
        Map(x => x.PersistedTimeStamp)
            .CustomType<UtcDateTimeType>()
            .Generated.Insert();

        HasMany<InvoiceDetail>(x => x.InvoiceDetails)
            .Inverse()
            .Cascade.All()
            .KeyColumn("InvoiceItemId");
    }
}

请注意更新无操作时的
删除无操作时的
行。我原以为
Cascade.All()
指令会在DELETE Cascade上的UPDATE Cascade上创建一个
。我做了哪些错误或不完全的事情?

NH支持许多不同的RDBMS,并且已经有很长一段时间了,因此默认是在代码中完成。另一方面,FNH开始实施最常见的功能,而这一功能并非如此。而且仍然没有人提出问题来支持NH的这一特性。此外,很难说,因为在映射中方言是未知的,因此无法知道该功能是否受支持。

映射看起来是正确的。你测试代码了吗?我认为NHibernate不支持直接在数据库上执行级联删除,而是通过发送额外的SQL命令来处理级联本身。@CarstenSchütte有什么代码需要测试?它编译,实体是使用NHibernate创建的,PersistenceSpecification测试通过,所有工作正常。。。看起来外键将被设计为支持级联删除。让NHibernate子系统显式删除依赖记录的操作成本要高得多。但对我来说,NHibernate似乎就是这样工作的。在我们使用SQLServer或MySQL的项目上也是如此,这两个数据库都支持外键约束上的DELETE,但NHibernate不使用它们,而是删除引用的行本身。所以这是设计的。好吧,那太差劲了。把它写下来作为答案,我会接受的。嗯,我错了。NHibernate可以支持它,前提是方言.supportscadedelete=true且ForeignKey映射已启用CascadeDeleteEnabled=true。我们也使用fluent,看起来这是FluentNHibernate中的一个bug。能否将映射文件写入临时目录并在此处添加映射?
CREATE TABLE "InvoiceDetail"
(
  detailid uuid NOT NULL,
  account character varying(255),
  credit numeric(19,5),
  debit numeric(19,5),
  paytype integer,
  rownumber integer,
  invoiceitemid uuid,
  CONSTRAINT "InvoiceDetail_pkey" PRIMARY KEY (detailid ),
  CONSTRAINT fkd8588014e9009e93 FOREIGN KEY (invoiceitemid)
      REFERENCES "InvoiceItem" (recordid) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION