首页 > 后端开发 > C++ > 如何防止实体框架持久化子对象?

如何防止实体框架持久化子对象?

Mary-Kate Olsen
发布: 2025-01-03 00:14:38
原创
962 人浏览过

How Can I Prevent Entity Framework from Persisting Child Objects?

在实体框架中抑制子对象持久化

在实体框架中,通常假设保存实体会自动将其子对象持久化为出色地。然而,在某些情况下,可能需要阻止这种行为。这在处理可能不直接对应于数据库模式的扁平化数据时特别有用。

让我们考虑一个假设场景,其中 School 实体包含 City 属性。当从平面文件填充 School 对象时,City 属性可以引用查找表来确定地理位置。但是,由于这些城市定义已经存在于数据库中,因此实体框架在保存学校时无需再次插入它们。

为了防止实体框架在这种情况下持久保留子对象,有两种方法:

方法 1:使用 EntityState

一种方法涉及手动设置子级的 EntityState反对不变。这指示实体框架在保存操作期间忽略子对象。下面是一个示例:

using (var context = new DatabaseContext())
{
    context.Set<School>().Add(newItem);
    // Set the City property to Unchanged
    context.Entry(newItem.City).State = EntityState.Unchanged;
    context.SaveChanges();
}
登录后复制

方法 2:使用外键

更优雅、更灵活的方法是在实体定义中使用外键属性。在子属性上定义外键属性以显式指定其与外部实体的关系。例如:

public class School
{
    [ForeignKey("City_Id")]
    public City City { get; set; }
    [Required]
    public int City_Id { get; set; }
}
登录后复制

这种方法允许您在对象创建期间显式指定外键值,通知实体框架子对象已经被持久化。通过在保存时将 City 属性设置为 null,可以从上下文图中省略 City 属性:

newItem.City = null;
context.Set<School>().Add(newItem);
context.SaveChanges();
登录后复制

通过采用这些方法之一,您可以阻止实体框架尝试保存子对象,确保只有所需的实体被持久化到数据库中。

以上是如何防止实体框架持久化子对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板