首页 新闻 会员 周边

EF使用Repository模式遇到的问题

0
悬赏园豆:50 [已解决问题] 解决于 2012-05-28 15:31

在Entity Framework中,使用Repository模式,在多对多关系中,比如角色和权限中吧,一个角色有多个权限,一个权限也可以属于多个角色。我在这里遇到问题了,角色和权限我写了两个Repository,分别是RoleRepository和PermRepository(使用的是泛型,就是又继承了一下),在添加角色的时候,我using(IRoleRepository repository=new RoleRepository()),这样就产生了一个context,在上面using的内部(编辑状态下),我又using(IPermRepository permRepository=new PermRepository()),就是想得到新添加的权限var perm=permRepository.Find(权限id),但是这样的话,就产生了两个context,如果role.Perms.Add(perm),就会提示如下的错误 

如果使用Repository模式,怎么避免如上面所述的产生两个context而导致的问题。

 

另外,在角色编辑状态下,角色在数据库里有了,权限在数据库里也有了,这是如果再增加新的权限,使用role.Perms.Add(perm);repository.Update(role);repository.SaveChanges();

会提示如下错误

BobTian的主页 BobTian | 初学一级 | 园豆:130
提问于:2012-05-25 15:49
< >
分享
最佳答案
0

后面的没细看了。 。。

对于这个,我也是这几天才接触。

不过,给你个建议:

1——

Repository的构建应该传递一个Context进去

2——

Repository在Dispose的时候不要把Context也Dispose了。

从错误看,很明显是因为两个Repository使用了不同的Context。

无论你用EF还是LINQ TO SQL,都必须遵循一个原则:在相同的场景下。否则,他们之间是不可比的,除非你对他们完全单独操作。

收获园豆:40
无之无 | 大侠五级 |园豆:5095 | 2012-05-25 16:20
其他回答(1)
0

很對。對於後面的,如果需要共享一個context的話,你就傳一個context進去。這樣的話,也可以用于同一個事務。可以用構造函數重載實現。

收获园豆:10
無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-25 17:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册