2014-09-19 91 views
0

好吧,我会尽我所能描述这一点。 例如 - 我在数据库中有两个表,员工&配置文件。 员工拥有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,所以我不与该对象一起工作,并且不会尝试再次添加它作为它的参考 - 但我真的没有认为我也应该有,我一定会错过一些东西,我可以直接选择这些元素作为对象,但分配它们总是会导致数据库重新添加配置文件等。

回答

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创建新的配置文件,它必须做一些事情的Wi它如何处理图形。由于Employee对象具有EntityState.Added,我猜它也将它自己传递给子对象。欲了解更多信息here's来自Julie Lerman的一篇文章,内容非常相同。

相关问题