Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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# 在这种情况下,如何对实体执行级联删除?_C#_Entity Framework - Fatal编程技术网

C# 在这种情况下,如何对实体执行级联删除?

C# 在这种情况下,如何对实体执行级联删除?,c#,entity-framework,C#,Entity Framework,如何让entity framework从EsignatureDocument中删除字段和事件(定义如下),而不会导致错误?我怀疑我可以编写一些模型构建代码,使用EntityTypeConfiguration在DbContext中的应用程序启动时执行这些代码。。。以下示例的生成器代码是什么 我有一块很短的C#能用。这是: var document = _repo.Load<EsignatureDocument>(input.EsignatureDocumentId); doc

如何让entity framework从EsignatureDocument中删除字段和事件(定义如下),而不会导致错误?我怀疑我可以编写一些模型构建代码,使用EntityTypeConfiguration在DbContext中的应用程序启动时执行这些代码。。。以下示例的生成器代码是什么

我有一块很短的C#能用。这是:

    var document = _repo.Load<EsignatureDocument>(input.EsignatureDocumentId);

document.Events.Clear();

                document.Fields.Clear();

            _repo.SaveChanges();
Clear()删除对父实体的引用,而不是子实体本身

问题是,当调用document.Fields.Clear()时,它将使字段实体上的EsignatureDocumentId列为空。这是不允许的,因为EsignatureDocumentId不可为空,因此您不能拥有没有父文档的字段。 您应该将该列标记为可空,或者应该使用:

foreach(var f in document.Field) 
{
    Context.DeleteObject(f); //or fieldRepo.Delete(f) or something that fits for 
}

如果调用
RemoveAll(t=>true)
而不是
Clear()
在HashSet上没有RemoveAll,但是当我执行document.Fields.RemoveWhere(x=>x.esignateDocumentId==input.esignateDocumentId)时会发生什么;当我从HashSet更改为List并执行RemoveAll时,仍然会出现相同的错误
CREATE TABLE [dbo].[EsignatureDocumentEvent](
    [Id] [uniqueidentifier] NOT NULL,
    [EsignatureDocumentId] [uniqueidentifier] NOT NULL,
    [Action] [int] NOT NULL,
    [ActionName] [varchar](50) NOT NULL,
    [FieldsJson] [varchar](max) NULL,
    [DocumentPdf] [varchar](1000) NULL,
    [CreatedDate] [datetime] NOT NULL,
 CONSTRAINT [PK_EsignatureDocumentEvent] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO



  ALTER TABLE [dbo].[EsignatureDocumentEvent]  WITH CHECK ADD  CONSTRAINT [FK_EsignatureDocumentEvent_EsignatureDocument] FOREIGN KEY([EsignatureDocumentId])
    REFERENCES [dbo].[EsignatureDocument] ([Id])
    GO

    ALTER TABLE [dbo].[EsignatureDocumentEvent] CHECK CONSTRAINT [FK_EsignatureDocumentEvent_EsignatureDocument]
    GO

CREATE TABLE [dbo].[EsignatureDocumentField](
    [Field_Id] [int] NOT NULL,
    [Field_Name] [varchar](100) NOT NULL,
    [Field_Value] [varchar](1000) NOT NULL,
    [Field_Type] [varchar](100) NOT NULL,
    [EsignatureDocumentId] [uniqueidentifier] NOT NULL,
PRIMARY KEY CLUSTERED 
(
    [Field_Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[EsignatureDocumentField]  WITH CHECK ADD  CONSTRAINT [FK_EsignatureDocumentField_EsignatureDocument] FOREIGN KEY([EsignatureDocumentId])
REFERENCES [dbo].[EsignatureDocument] ([Id])
GO

ALTER TABLE [dbo].[EsignatureDocumentField] CHECK CONSTRAINT [FK_EsignatureDocumentField_EsignatureDocument]
GO
foreach(var f in document.Field) 
{
    Context.DeleteObject(f); //or fieldRepo.Delete(f) or something that fits for 
}