C# 关系的流畅配置
在我的模型中,有一些实体引用Image类的实例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
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; }
}