【发布时间】:2014-12-04 15:38:42
【问题描述】:
我正在编写一个 OData / Entity Framework 客户端服务器应用程序,但无法将多对多关系从客户端更新到服务器。
OData 服务器是使用 VS2013 在 c# 中使用 WCF 5.6 和 Entity Framework 6 编写的。
数据库只是 3 个表,Users、Permissions 和一个连接表 UsersPermissions。
我正在使用 Entity Framework 6,它抽象出加入的 UsersPermissions 表,只留下 Users 和 Permissions 实体。
我可以从使用 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
如果我有任何帮助或建议,我将不胜感激,因为我无法从 OData 客户端与使用 EF6.0 的 OData 服务器创建多对多关系。
【问题讨论】:
标签: linq wcf many-to-many odata entity-framework-6