モデル:は、唯一の財産全体ではなく、データベースの行を含める
public class Word
{
public int ID { get; set; }
public string Title { get; set; }
public DateTime? WhenCreated { get; set; }
public ApplicationUser Author { get; set; }
[NotMapped]
public string AuthorName
{
get
{
if (Author != null)
{
return Author.UserName;
}
else {
return "";
}
}
}
public List<Definition> Definitions { get; set; }
}
コントローラー:
[HttpGet]
public IEnumerable<Word> Get()
{
return _db.Words.Include(x=>x.Author).ToList();
}
私のコントローラは、今Word
の特性の一つである全体ApplicationUser
クラスを返します。 ApplicationUser
という1つのプロパティを送信したい:UserName
。どうやってやるの?
AuthorName
を追加しました。これは、ApplicationUser
から必要なデータのみを返します。残念ながら、私はまだこのプロパティを動作させるには.Include(x=>x.Author)
する必要があります。データのシリアル化処理中にAuthor
を含むことを何らかの理由で省略することはできますか(ユーザーにデータを送信するときに非表示にする)?
私は.Select()
メソッドを使用できますが、必要なすべてのプロパティを入力する必要があります。将来私のモデルを変更する場合、私はこれらのすべてを更新する必要があります。これは不便で時間の無駄になります。
どうすれば解決できますか?
私は 'を削除します。ToList() '、より正確な感じ、コントローラがクエリを実現するようにします。 –
申し訳ありませんが、私は完全に理解していません。 Selectを使用すると、 'UserName'変数だけが返されます(私はそれが何であるか分かりませんが、' Word'クラスには存在しません)。 'Word'クラスのすべてのプロパティと' Author 'のプロパティの1つを返すようにします – Piotrek
次にDtoオブジェクトを作成して代入/平滑化する必要があります – Tseng