我为两个表之间的OnDelete:Cascade
关系设置了articleId
。所以当我们从文章表中删除一条记录时,sql将删除articlePics表中的所有文章图片。当我使用此代码时,我正在使用EF来删除数据库中的行:
db.article_table.Remove(article);
EF向数据库发送N + 1删除查询(1用于删除文章&n; N用于删除图片)。 使用以下代码时:
db.Entry(article).State = EntityState.Deleted;
EF向数据库发送1个删除查询和N个更新查询(1个用于删除文章& N,用于将articlePics_table articleId
col设置为null)。
如何删除包含一个删除查询的文章,让SQL本身删除OnDelete:Cascade
的子项?
我正在使用数据库优先方法,这是我的连接字符串和OnModelCreating
:
<add name="educationSocialNetworkEntities" connectionString="metadata=res://*/db.csdl|res://*/db.ssdl|res://*/db.msl;provider=System.Data.SqlClient;provider
connection string="data source=.;initial catalog=educationSocialNetwork;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
答案 0 :(得分:0)
你必须在流利的api中做这样的事情:
modelBuilder.Entity<Article>
.HasMany(a => a.articlePics)
.WithRequired(a => a.Article)
.WillCascadeOnDelete(true);