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; }
}