2012-09-16 5 views
4

저는 EF4.3을 사용하고 있습니다. 그것은 내가가는 동안 배울 수있는 첫 번째 프로젝트입니다.엔티티에 새 생성자 추가

엔티티에 대한 추가 생성자를 구현해야하는 경우가 있습니다. 이렇게하기 위해 추가 부분 클래스를 생성하므로 엔티티 Users는 연관된 클래스 User2를 갖습니다.

나는 전체에 EF는 생성자를 생성하지 않는 것으로 나타났습니다하지만, 인스턴스는 다음과 같이 있습니다 :

public partial class User 
{ 
    public User() 
    { 
     this.BookmarkedDeals = new HashSet<BookmarkedDeal>(); 
     this.BookmarkedStores = new HashSet<BookmarkedStore>(); 
    } 

    public System.Guid UserId { get; set; } 
    public int UserStatusId { get; set; } 
    public int UserRoleId { get; set; } 
    public System.DateTime CreatedOn { get; set; } 
    public System.DateTime LastVisitedOn { get; set; } 

    public virtual ICollection<BookmarkedDeal> BookmarkedDeals { get; set; } 
    public virtual ICollection<BookmarkedStore> BookmarkedStores { get; set; } 
    public virtual Subscriber Subscriber { get; set; } 
} 

이가 너무 쉽게를 통해 탐색 속성을 추가 할 수 있기 때문에 나를 조금 걱정 있어요 디자이너 및 기본 생성자 내의 코드가 누락되었습니다.

public User() 
    { 
     this.BookmarkedDeals = new HashSet<BookmarkedDeal>(); 
     this.BookmarkedStores = new HashSet<BookmarkedStore>(); 
    } 

내 질문입니다, 내 추가 contructors에서 기본 생성자를 호출 할 필요가 내가 코드를 넣어해야 할 : 안전 장치로 모든 경우에 호출 내 기본 생성자 (이 사용자())을? 단지 NullReferenceException들에 대해 당신에게 조금을 보호하기 위해 탐색 모음을 인스턴스화 도우미로

답변

6

EF (데이터베이스 첫 번째 또는 모델 처음으로) 그 기본 생성자를 생성 ...

public User() 
{ 
    this.BookmarkedDeals = new HashSet<BookmarkedDeal>(); 
    this.BookmarkedStores = new HashSet<BookmarkedStore>(); 
} 

.... 그러나 필수는 아닙니다. BookmarkedDealsBookmarkedStores을 포함하여 DB에서 User 엔티티를로드하는 경우 EF는 어쨌든 모음을 인스턴스화합니다. 새 생성자를 추가하는 경우

var user = new User { BookmarkedDeals = new HashSet<BookmarkedDeal>() }; 
user.BookmarkedDeals.Add(new BookmarkedDeal()); 

나는 일관 컬렉션의 인스턴스를 사용하도록 기본 생성자를 호출 것 : 당신이 User 직접 만드는 경우 constructur이 될하지 않는다면 당신은 수동으로 세트를 인스턴스화했다 모든 생성자 사이.)

public User(SomeType SomeParameter) : this() 
{ 
    //Do somthing with SomeParameter... 
} 
+0

덕분에 내가 이것을 (평균 않았다 - 그냥 내 재 입력에 열중하고 있었다 :하지만 모두 생성자가 아닌 상속 계층 구조에서, 같은 클래스에 있기 때문에 this하지 base해야합니다 생각 – dotnetnoob