作网站,软件技术专业介绍公布,为什么要建立电子商务网站,seo优化软件oem文章目录 EF更新和插入时如何忽略更新导航属性级联删除删除主体/父实体断开关系配置级联行为 来源 EF更新和插入时如何忽略更新导航属性 
使用Ignore方法#xff1a; 
modelBuilder.EntityBlog().Ignore(b  b.Posts);使用HasNoKey方法#xff1a; 
modelBuilder.… 文章目录 EF更新和插入时如何忽略更新导航属性级联删除删除主体/父实体断开关系配置级联行为 来源 EF更新和插入时如何忽略更新导航属性 
使用Ignore方法 
modelBuilder.EntityBlog().Ignore(b  b.Posts);使用HasNoKey方法 
modelBuilder.EntityBlog().HasNoKey();使用HasNoNavigation方法 
modelBuilder.EntityBlog().HasNoNavigation(b  b.Posts);使用HasNoRelationship方法 
modelBuilder.EntityBlog().HasNoRelationship(b  b.Posts);级联删除 
删除主体/父实体 
请考虑此简单模型其中 Blog 是与 Post依赖实体/子实体的关系中的主体/父实体。 Post.BlogId 是一个外键属性其值必须与该文章所属博客中的 Blog.Id 主键匹配。 
public class Blog
{public int Id { get; set; }public string Name { get; set; }public IListPost Posts { get; }  new ListPost();
}public class Post
{public int Id { get; set; }public string Title { get; set; }public string Content { get; set; }public int BlogId { get; set; }public Blog Blog { get; set; }
}按照约定由于 Post.BlogId 外键属性是不可为 null 的因此该关系被配置为必需的。 默认情况下所需的关系配置为使用级联删除。 要详细了解建模关系请参阅关系。 
删除博客时所有文章都将被级联删除。 例如 
using var context  new BlogsContext();var blog  context.Blogs.OrderBy(e  e.Name).Include(e  e.Posts).First();context.Remove(blog);context.SaveChanges();SaveChanges 以 SQL Server 为例生成以下 SQL 
-- Executed DbCommand (1ms) [Parameters[p01], CommandTypeText, CommandTimeout30]
SET NOCOUNT ON;
DELETE FROM [Posts]
WHERE [Id]  p0;
SELECT ROWCOUNT;-- Executed DbCommand (0ms) [Parameters[p02], CommandTypeText, CommandTimeout30]
SET NOCOUNT ON;
DELETE FROM [Posts]
WHERE [Id]  p0;
SELECT ROWCOUNT;-- Executed DbCommand (2ms) [Parameters[p11], CommandTypeText, CommandTimeout30]
SET NOCOUNT ON;
DELETE FROM [Blogs]
WHERE [Id]  p1;
SELECT ROWCOUNT;断开关系 
我们不会删除博客而是断开每篇文章与其博客之间的关系。 为此可将每篇文章的引用导航 Post.Blog 设置为 null 
using var context  new BlogsContext();var blog  context.Blogs.OrderBy(e  e.Name).Include(e  e.Posts).First();foreach (var post in blog.Posts)
{post.Blog  null;
}context.SaveChanges();还可通过从 Blog.Posts 集合导航中删除每篇文章内容来断开关系 
using var context  new BlogsContext();var blog  context.Blogs.OrderBy(e  e.Name).Include(e  e.Posts).First();blog.Posts.Clear();context.SaveChanges();无论哪种情况结果都一样没有删除博客但是删除了不再与任何博客关联的文章 
-- Executed DbCommand (1ms) [Parameters[p01], CommandTypeText, CommandTimeout30]
SET NOCOUNT ON;
DELETE FROM [Posts]
WHERE [Id]  p0;
SELECT ROWCOUNT;-- Executed DbCommand (0ms) [Parameters[p02], CommandTypeText, CommandTimeout30]
SET NOCOUNT ON;
DELETE FROM [Posts]
WHERE [Id]  p0;
SELECT ROWCOUNT;删除不再与任何主体/依赖实体关联的实体这一行为被称作“删除孤立项”。 级联删除和删除孤立项是密切相关的。 当断开与所需的主体/父实体之间的关系时两者都将导致删除依赖实体/子实体。 对于级联删除由于主体/父实体本身已删除因此发生了这种断开。 对于孤立项主体/父实体仍然存在但不再与依赖实体/子实体相关。 配置级联行为 
使用 OnModelCreating 中的 OnDelete 方法按关系配置级联行为。 例如 
protected override void OnModelCreating(ModelBuilder modelBuilder)
{modelBuilder.EntityBlog().HasOne(e  e.Owner).WithOne(e  e.OwnedBlog).OnDelete(DeleteBehavior.ClientCascade);
}OnDelete 从公认地令人混淆的 DeleteBehavior 枚举中接受一个值。 该枚举既定义了 EF Core 在跟踪实体上的行为又定义了使用 EF 创建架构时数据库中级联删除的配置。 
来源 
EF更新和插入时如何忽略更新导航属性 级联删除