在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();
会提示如下错误
后面的没细看了。 。。
对于这个,我也是这几天才接触。
不过,给你个建议:
1——
Repository的构建应该传递一个Context进去
2——
Repository在Dispose的时候不要把Context也Dispose了。
从错误看,很明显是因为两个Repository使用了不同的Context。
无论你用EF还是LINQ TO SQL,都必须遵循一个原则:在相同的场景下。否则,他们之间是不可比的,除非你对他们完全单独操作。
很對。對於後面的,如果需要共享一個context的話,你就傳一個context進去。這樣的話,也可以用于同一個事務。可以用構造函數重載實現。