实体框架重新添加现有数据库对象

本文关键字:数据库 对象 添加 框架 新添加 实体 | 更新日期: 2023-09-27 18:23:44

好的,我会尽可能简单地描述它。例如,我在一个数据库中有两个表,Employee&轮廓Employee有ProfileID的外键,因此可以将1个Profile分配给许多Employees以确定他们的访问权限,一切都很好。

在EF中使用c#-当选择时,比如创建一名员工并设置一个已经存在的配置文件,如下所示,它会再次尝试将该配置文件添加到数据库中?

using (var ds = new DSEntities())
                {
                    Employee e = new Employee();
                    e.AccessProfile = ds.AccessProfiles.First();
                    ds.Employees.Add(e);
                    ds.SaveChanges();
                }

只有Employee记录是新的,Profile不是。有人能证实它为什么这么做吗?我可以直接设置Employee.AccessProfileID键,只需将其设置为ds.AccessProfiles.First().AccessProfileID,这样我就不会处理该对象,也不会试图将其再次添加为一个ref,但我真的不认为我也应该这样做,我一定错过了什么,我可以直接选择这些元素作为对象,但分配它们总是会导致数据库重新添加配置文件等。

实体框架重新添加现有数据库对象

添加现有配置文件的最简单方法是在Employee对象中设置AccessProfileID,如下所示:

using (var ds = new DSEntities())
                {
                    Employee e = new Employee();
                    e.AccessProfileId = ds.AccessProfiles.First().Id;
                    ds.Employees.Add(e);
                    ds.SaveChanges();
                }

至于为什么ef在执行示例中的代码时会创建新的Profile,它必须与处理图形的方式有关。由于Employee对象具有EntityState.Added,我想它也会将其自身传递给子对象。欲了解更多信息,这里有朱莉·勒曼关于同一主题的帖子。