首页 新闻 会员 周边

请教关于ADO.Net Entity FrameWork 的问题,这个问题很重要!

0
[已解决问题] 解决于 2008-09-12 09:30

我有个数据库,里面有两个表:Department(部门)和Employee(雇员表)Department的主键为Guid的DepartmentID,和Employee的外键DeparmentID关联,形成一对多关系,用ADO.Net Entity Framework 生成实体后。

我想增加一个雇员:可是生成的Employee实体中没有DepartmentID的属性,我怎么给它赋值呢?

而且也无法更新这个雇员的部门信息,还是因为这个雇员实体中没有DepartmentID的属性!

我找到了一个解决办法是:

Employee emp = new Employee();

emp.Name="xiaozhuang";

ObjectQuery<Department> dept= entities.CreateQuery<Department>("Select Value a from Department as a where a.DepartmentID = @ID", new ObjectParameter("ID", new Guid(DepartmentID)));
dept.FirstOrDefault().Employee.Add(emp);

entities.SaveChanges();

可是这样也太搞笑了吧?插入还要先查询出来啊?性能太差了!

还有一个办法是:

Employee emp = new Employee();

emp.Name="xiaozhuang";

emp.DepartmentReference.EntityKey = new System.Data.EntityKey("ForeseeFrameWorkDataBaseEntities.Department", "DepartmentID", new Guid(departmentid));

entities.AddToEmployee(emp);

entities.SaveChanges();

这样倒是不用查询了,可是这样的话DeparmentID属性的改变绕过了Tracking机制,因为它没有出发PropetyChanged事件,怎么办呢?

同样的道理,更改(Edit/Update)雇员部门的操作也无法完成!

问题补充:如果直接给Employee的导航属性Department赋值DepartmentID的话,实体框架就会试图生成一个新的Department实体,并一起和Employee插入数据库的,但是数据库中已经有个Department了,主键重复出错!

小庄的主页 小庄 | 菜鸟二级 | 园豆:364
提问于:2008-09-11 14:43
< >
分享
最佳答案
0

从领域建模的角度说,就是应该先查出来再插入的,这和现有的数据为中心的建模技术有冲突,因此在这些问题上有了矛盾并让习惯了数据中心建模的人感到好笑而已……

Gray Zhang | 专家六级 |园豆:17610 | 2008-09-11 15:26
什么最佳答案 我都服了 不知道lazy吗? new 一个Department空类 只给这个类的ID赋值 然后把Department类赋到Employee即可 根本不需要查数据库
传说中的弦哥 | 园豆:275 (菜鸟二级) | 2010-07-08 12:01
@传说中的弦哥:无所谓吧,我就问你,抛开具体的数据库技术(ORM本就希望最终完全屏蔽数据库),在面向的角度上来说,弄一个只有ID的Department是不是正确的?
Gray Zhang | 园豆:17610 (专家六级) | 2010-07-08 15:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册