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

时间:2014-09-19 07:48:56

标签: c# sql entity-framework

好的,我会尽可能简单地描述一下。 例如 - 我在数据库中有两个表,Employee&轮廓。 员工拥有ProfileID的外键,因此可以将1个配置文件分配给许多员工以确定其访问权限,这一切都很好。

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

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

只有员工记录是新的,而个人资料不是。任何人都可以确认为什么这样做? 我可以直接设置Employee.AccessProfileID键,然后将其设置为ds.AccessProfiles.First()。AccessProfileID所以我不使用该对象,并且不会尝试再次添加它作为它只是一个参考 - 但我真的不认为我也应该有,我必须遗漏一些东西,我可以直接选择这些元素作为对象,但分配它们总是会导致数据库重新添加配置文件等。

1 个答案:

答案 0 :(得分:0)

添加现有配置文件的最简单方法是在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,我猜它也将自己转移到子对象。有关更多信息here's Julie Lerman关于同一主题的帖子。

相关问题