将NotMapped属性值与Odata $ filter函数一起使用

Ofe*_*ear 3 asp.net-mvc entity-framework odata

我试图找出如何使用OData 的NotMapped属性

我有这个用户模型:

[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; 
}
Run Code Online (Sandbox Code Playgroud)

我在用户控制器中有这个GetAll()方法

public IQueryable<User> GetAllUsers()
{
       _repository = new UserRepository();
       return _repository.GetAll().AsQueryable();
 }
Run Code Online (Sandbox Code Playgroud)

和用户存储库中的此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;         
}
Run Code Online (Sandbox Code Playgroud)

这是InstagramUser模型

[DataContract]
public class InstagramUser
{
[DataMember]
public long UserId { get; set; }
[DataMember]
public string InstagramID { get; set; 
}
Run Code Online (Sandbox Code Playgroud)

一切顺利.

我对User模型进行了更改并添加了InstagramUser包含的模型InstagramID,因此我添加了[NotMapped]属性以从DB中的User表中删除InstagramID,因为InstagramUser已经包含了InstagramID.

我什么时候尝试使用这样的Odata:localhost:555/api/users /?$ filter = InstagramID eq'456456546'它失败并返回一个错误,即InstagramID属性不存在.

如何在NotMapped属性上使用Odata过滤器?

Jas*_*ele 8

这对我来说在Web API中使用OData v4:

var t = modelBuilder.StructuralTypes.First(x => x.ClrType == typeof(User));
t.AddProperty(typeof(User).GetProperty("InstagramID"));
Run Code Online (Sandbox Code Playgroud)