【发布时间】:2017-07-11 02:33:50
【问题描述】:
我正在尝试弄清楚如何将 NotMapped 属性与 OData 一起使用
我有这个用户模型:
[DataContract]
public class User
{
[DataMember]
public long Id { get; set; }
[DataMember]
public virtual InstagramUser InstagramUser { get; set; }
[DataMember]
public virtual FacebookUser FacebookUser { get; set; }
[NotMapped]
public string InstagramID { get; set;
}
我在用户控制器中有这个 GetAll() 方法
public IQueryable<User> GetAllUsers()
{
_repository = new UserRepository();
return _repository.GetAll().AsQueryable();
}
以及用户存储库中的这个 GetAll() 函数
public IQueryable<User> GetAll()
{
InstaStoryDB db = new InstaStoryDB();
var ret = db.Users.Include("InstagramUser").Include("FacebookUser").AsQueryable();
foreach(User user in ret)
{
user.InstagramID = user.InstagramUser.InstagramID; //<-- I'm adding here the value to the property
}
return ret;
}
这就是 Instagram 用户模型
[DataContract]
public class InstagramUser
{
[DataMember]
public long UserId { get; set; }
[DataMember]
public string InstagramID { get; set;
}
一切正常。
我对 User 模型进行了更改并添加了包含 InstagramID 的 InstagramUser,因此我添加了 [NotMapped] 属性以从 DB 中的 User 表中删除 InstagramID,因为InstagramUser 已经包含 InstagramID。
当我尝试像这样使用 Odata 时: localhost:555/api/users/?$filter=InstagramID eq '456456546' 失败并返回 InstagramID 属性不存在的错误。
如何在 NotMapped 属性上使用带有 Odata 的过滤器?
【问题讨论】:
-
我猜你不能使用
NotMapped属性。NotMappet属性未在您的模型中描述,因此当您将 EF 提供程序用于 OData 服务时,它不可用于查询。 -
这就是我的想法,我在问题中添加了一个修复.. 你现在可以看一下吗?
标签: asp.net-mvc entity-framework odata