我有一个如下所示的实体结构,我在这里所做的是基于输入找到主实体,然后通过导航属性找到子实体,然后从不同位置的子表中删除子实体
public class GlazingOrGasMaterial : AEIMasterBase
{
[ForeignKey("SourceOfData"), GraphQLIgnore]
public Guid? SourceOfDataId { get; set; }
public virtual CodeStandardGuideline SourceOfData { get; set; }
[ForeignKey("GlazingComplexMaterial"), GraphQLIgnore]
public Guid? GlazingComplexMaterialId { get; set; }
[ForeignKey("GlazingSimpleMaterial"), GraphQLIgnore]
public Guid? GlazingSimpleMaterialId { get; set; }
[ForeignKey("GlazingGasMaterial"), GraphQLIgnore]
public Guid? GlazingGasMaterialId { get; set; }
public virtual GlazingComplexMaterial GlazingComplexMaterial { get; set; }
public virtual GlazingSimpleMaterial GlazingSimpleMaterial { get; set; }
public virtual GlazingGasMaterial GlazingGasMaterial { get; set; }
}
以下是删除该子实体的代码
方法一:
if(requestInput.RequestType == RequestAction.EDIT)
{
var existingGlazingOrGasMaterial = dbContext.GlazingOrGasMaterials.Find(requestInput.DataId);
if(existingGlazingOrGasMaterial != default)
{
var existingGasMaterial = dbContext.GlazingGasMaterials.SingleOrDefault(gasMaterial => gasMaterial.Id == existingGlazingOrGasMaterial.GlazingGasMaterialId);
if(existingGasMaterial != default)
{
dbContext.GlazingGasMaterials.Remove(existingGasMaterial);
}
}
}
下面是我删除该子实体的代码
方法二:
if (requestInput.RequestType == RequestAction.EDIT)
{
var existingGlazingOrGasMaterial = dbContext.GlazingOrGasMaterials.Find(requestInput.DataId);
if (existingGlazingOrGasMaterial != default)
{
var existingComplexMaterial = dbContext.GlazingComplexMaterials.SingleOrDefault(complexMaterial => complexMaterial.Id == existingGlazingOrGasMaterial.GlazingComplexMaterialId);
if (existingComplexMaterial != default)
{
dbContext.GlazingComplexMaterials.Remove(existingComplexMaterial);
}
}
}
方法三:
if (requestInput.RequestType == RequestAction.EDIT)
{
var existingGlazingOrGasMaterial = dbContext.GlazingOrGasMaterials.Find(requestInput.DataId);
if (existingGlazingOrGasMaterial != default)
{
var existingSimpleMaterial = dbContext.GlazingSimpleMaterials.SingleOrDefault(simpleMaterial => simpleMaterial.Id == existingGlazingOrGasMaterial.GlazingSimpleMaterialId);
if (existingSimpleMaterial != default)
{
dbContext.GlazingSimpleMaterials.Remove(existingSimpleMaterial);
}
}
}
下面是子实体的结构
public class GlazingSimpleMaterial
{
public Guid Id { get; set; }
.....
.....
}
public class GlazingComplexMaterial
{
public Guid Id { get; set; }
.....
.....
}
public class GlazingGasMaterial
{
public Guid Id { get; set; }
.....
.....
}
我正在寻找一种通用方法,我们可以将实体作为泛型类型传递并进行删除,有人可以告诉我如何实现这一点吗?
提前谢谢了!!