如何防止EF发送额外删除sql查询

时间:2015-12-20 13:43:52

标签: c# sql-server database entity-framework

这是我的数据库:
 db1

db2

db3

我为两个表之间的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的子项?

更新1

我正在使用数据库优先方法,这是我的连接字符串和OnModelCreating

      <add name="educationSocialNetworkEntities" connectionString="metadata=res://*/db.csdl|res://*/db.ssdl|res://*/db.msl;provider=System.Data.SqlClient;provider 
connection string=&quot;data source=.;initial catalog=educationSocialNetwork;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />  
   protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }

1 个答案:

答案 0 :(得分:0)

你必须在流利的api中做这样的事情:

modelBuilder.Entity<Article>
   .HasMany(a => a.articlePics)
   .WithRequired(a => a.Article)
   .WillCascadeOnDelete(true);