Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.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#_Asp.net_Entity Framework_Asp.net Web Api - Fatal编程技术网

C# 实体框架在指定为级联删除时无法加载外键数组属性

C# 实体框架在指定为级联删除时无法加载外键数组属性,c#,asp.net,entity-framework,asp.net-web-api,C#,Asp.net,Entity Framework,Asp.net Web Api,我有一个项目数据模型: [DataContract] public class Item { [Key] [DataMember] public int ItemId { get; set; } [DataMember] public string Title { get; set; } [DataMember] public string Description { get; set; } [DataMember]

我有一个项目数据模型:

[DataContract]
public class Item
{
    [Key]
    [DataMember]
    public int ItemId { get; set; }

    [DataMember]
    public string Title { get; set; }

    [DataMember]
    public string Description { get; set; }

    [DataMember]
    public ICollection<ItemImage> Images { get; set; }
}
在我添加以下代码之前,一切都正常

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
        modelBuilder.Entity<ItemImage>()
            .HasRequired(ii => ii.Item)
            .WithMany()
            .HasForeignKey(ii => ii.ItemId)
            .WillCascadeOnDelete(true);
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasRequired(ii=>ii.项)
.有很多
.HasForeignKey(ii=>ii.ItemId)
.WillCascadeOnDelete(真);
}
将级联删除指定为true后,无法加载项中的Images属性。有人能帮我弄清楚发生了什么事吗?非常感谢

尝试添加“虚拟”以便

public virtual ICollection<ItemImage> Images { get; set; }
公共虚拟ICollection映像{get;set;}

您遇到了这个问题,因为您错过了关系中多个端点的配置:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<ItemImage>()
        .HasRequired(ii => ii.Item)
        .WithMany(i=>i.Images)
        .HasForeignKey(ii => ii.ItemId)
        .WillCascadeOnDelete(true);
}

这解决了我的问题。回答得很好!谢谢!是否只有当我想禁用级联删除时,我才应该使用fluent api?是的,如果您想在FK属性不可为null的关系中禁用级联删除,那么您就没有使用fluent api的其他选择。Fluent Api提供了比数据注释更多的配置选项。我尝试过使用虚拟和不使用虚拟。无论哪种方式都会有同样的问题。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<ItemImage>()
        .HasRequired(ii => ii.Item)
        .WithMany(i=>i.Images)
        .HasForeignKey(ii => ii.ItemId)
        .WillCascadeOnDelete(true);
}
[DataContract]
public class Item
{
    //...
    [DataMember]
    public virtual ICollection<ItemImage> Images { get; set; }
}