Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.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,在我的模型中,有一些实体引用Image类的实例 public class Image { public int ID { get; set; } public string URL { get; set; } } public abstract class TeamBase { public Image Image { get; set; } } public class NewsArticle { public Ima

在我的模型中,有一些实体引用Image类的实例

    public class Image
  {
    public int ID { get; set; }

    public string URL { get; set; }

  }

public abstract class TeamBase
  {

    public Image Image { get; set; }

  }

public class NewsArticle
{      
  public Image Image { get; set; }

}

我要做的是通过删除新闻文章和其他实体来实现图像的删除级联

[Authorize]
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(int id)
{
  NewsArticle newsArticle = _repository.Get((int)id);
  _repository.Delete(newsArticle);
  _repository.Save();      
  return RedirectToAction("Index");
}
那么在OnModelCreating的覆盖中,声明引用映像实例的每个实体的关系的正确选项是什么?以下方法是正确的选择吗

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
      base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<NewsArticle>()
                    .HasOptional(n => n.Image)
                    .WithOptionalPrincipal()
                    .WillCascadeOnDelete(true);

        modelBuilder.Entity<Staff>()
                    .HasOptional(n => n.Image)
                    .WithOptionalPrincipal()
                    .WillCascadeOnDelete(true);
    }
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Entity()
.has可选(n=>n.Image)
.WithOptionalPrincipal()
.WillCascadeOnDelete(真);
modelBuilder.Entity()
.has可选(n=>n.Image)
.WithOptionalPrincipal()
.WillCascadeOnDelete(真);
}

我认为您需要的是将
替换为optionalPrincipal()
替换为
WithMany()
,只要
Image
实体没有
新闻文章的集合

配置

modelBuilder.Entity<NewsArticle>()
            .HasOptional(n => n.Image)
            .WithMany()  // no collection property on Image
            .WillCascadeOnDelete(true);

modelBuilder.Entity<Staff>()
            .HasOptional(n => n.Image)
            .WithMany() // no collection property on Image
            .WillCascadeOnDelete(true);
数据库中的
newsactle
表将在数据库中生成
Image\u ID
列,因为您使用的是独立关联(newsactle上没有
ImageID
属性)

数据库中的
图像
表将没有任何附加列


删除
图像
也将删除任何引用当前已删除图像的
新闻文章
员工

图像、新闻文章和员工之间的关系是什么?一个图像可以被多篇新闻文章使用,也可以被多个员工使用?@YuliamChandra这是一个1:0/1的关系,但是是的,可能实体可以引用同一个图像如果多个实体可以引用同一个图像,这是一对多,一个图像可以被多篇新闻文章引用,一个图像也可以被多个员工引用,你想要一个删除新闻文章(依赖)也会删除图像(主体)的行为吗?是的,图像可以与新闻文章或工作人员、播放器等有一对多的关系,但我不想将导航属性NewsArticleID、StaffID和PlayerID放入图像,是的,我喜欢你说的行为
public class Image
{
    public ICollection<NewsArticle> NewsArticles { get; set; }
    public ICollection<Staff> Staffs { get; set; }
}