3

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; 
}

そして、ユーザーコントローラーにこの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;         
}

これがInstagramUser モデルです

[DataContract]
public class InstagramUser
{
[DataMember]
public long UserId { get; set; }
[DataMember]
public string InstagramID { get; set; 
}

すべての作業は良好です。

User モデルに変更を加え、InstagramUserを含むを追加したInstagramIDので、[NotMapped] 属性を追加して、DBの User テーブルから InstagramID を削除しました。これは、InstagramUser に既に InstagramID が含まれているためです。

次のように Odata を使用しようとすると、 localhost:555/api/users/?$filter=InstagramID eq '456456546' 失敗し、InstagramID プロパティが存在しないというエラーが返されます。

NotMappedプロパティの Odataでフィルターを使用するにはどうすればよいですか?

4

3 に答える 3

9

これは、Web API で OData v4 を使用して私にとってはうまくいきました。

var t = modelBuilder.StructuralTypes.First(x => x.ClrType == typeof(User));
t.AddProperty(typeof(User).GetProperty("InstagramID"));
于 2016-03-20T14:34:29.247 に答える