我正在编写OData / Entity Framework客户端服务器应用程序,并且无法从客户端到服务器获取多对多关系。
使用WCF 5.6和实体框架6在c#中使用VS2013编写OData服务器。
数据库只有3个表,用户,权限和加入表 UsersPermissions 。
我正在使用Entity Framework 6,它抽象出加入的UsersPermissions表,只留下用户和权限实体。
来自用户我可以使用LINQ从客户端查询他们的权限没问题。类似地,我可以从权限中查询用户,因此多对多关系适合阅读。
如果我尝试从客户端创建关系,比如为用户添加新权限,则不会发生任何事情。没有流量到服务器,数据库中的连接表中没有更改数据。
无论我是尝试在客户端应用程序中向用户添加权限,还是使用LinqPad对我的OData源执行查询,都是一样的。
我使用的LINQ(取自LinqPad)是:
// Get permission
var Permission = (from p in Permissions
where p.PermissionId == 1
select p).SingleOrDefault();
// Get user
var User = (from u in Users
where u.UserId == 1
select u).SingleOrDefault();
// Add permission to user
User.Permissions.Add(Permission);
SaveChanges();
我尝试创建一个完全独立的OData服务器应用程序,并遇到同样的问题。
如果我在OData服务器应用程序中执行上述LINQ,它将按预期执行,并将该条目添加到UsersPermissions。
因此,当尝试从OData客户端更新多对多关系时,问题似乎只存在?
在本文的最后提到OData有很多关于刷新多对多关系的错误,但我甚至无法创建一个错误! http://msdn.microsoft.com/en-us/library/vstudio/bb896317(v=vs.100).aspx
我很感激任何帮助或建议,以便跟踪我为什么无法使用EF6.0从OData客户端创建多对多关系的OData服务器。
答案 0 :(得分:2)
要在客户端添加用户和权限之间的关系,请使用DataServiceContext.AddLink
dsc.AddLink(User, "Permissions", Permission)
dsc.SaveChanges()