2017-12-02 6 views
2

カスタマークラスは、「Id」プロパティーが使用可能なEntityから継承しています。しかし、私がコントローラにJSONオブジェクトをポストすると、「Id」を除くすべてのプロパティが開始されます。 "Id"は常に0ですFromBodyはバインドしません。Inherited Id

何か問題がありますか?

public abstract class Entity<TId> : IEquatable<Entity<TId>> 
{ 
    public TId Id { get; protected set; } 
} 

public class Customer : Entity<int> 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

    //Controller 
public void Post([FromBody] Customer customer) 
{ 
    if (customer.Id > 0) 
     _customeRepository.Update(customer); 

    _customeRepository.Insert(customer); 
} 

答えて

0

Idプロパティは、データバインディング時に設定することができなかった理由です、公共のセッターを持っていません。セッター国民を作成し、その値が正しく設定されます。

public abstract class Entity<TId> : IEquatable<Entity<TId>> 
{ 
    public TId Id { get; set; } 
} 

注:Customerタイプのパラメータは、デフォルトでは、要求本体からバインドされますので、FromBody属性は、この場合に必要とされていません。

+0

OOPS!あなたが正しいです! –

+0

セッターはあなたが正しいと保護されています。私はそれをそのままプロパティセッターを残したい場合は、任意の代替を持っていますか?このプロパティをどのように設定できますか? –

+0

setterが保護されている場合、派生クラスからのみアクセスできます。もう一つの選択肢は、リフレクションによってsetterを呼び出すことです。しかし、とにかくそれはコードのにおいであり、推奨されるアプローチではありません。 – CodeFuller

関連する問題