2017-12-02 4 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