2013-06-03 2 views
1

customer 중 하나 및 address 중 하나입니다.Entity Framework 코드 첫 번째 고객 및 주소 등록

필수 기능 고객이 등록하면 이름, 전화 번호 및 주소 세부 정보와 같은 개인 세부 정보를 같은보기에 입력합니다.

현재 기능 현재 EF 스캐 폴딩은 선택할 수있는 주소 드롭 다운 목록을 제공합니다.

현재 코드

public class Customer 
{ 
    public int CustomerId { get; set; } 
    public string FirstName { get; set; } 
    [Required] 
    public string Surname { get; set; } 
    [Required] 

    ... 
    Customer Fields 
    ... 

    public int AddressId { get; set; } 

    public virtual Address Address { get; set; } 
} 

public class Address 
{ 
    [Key] 
    public int AddressId { get; set; } 

    ... 
    Address Fields 
    ... 

    // Navigation Properties 
    public virtual List<Customer> Customer { get; set; } 
} 
데이터베이스 시드 할 때 다음과 같이, 나는 그렇게 할 수

:

new List<Customer> 
    { 
     new Customer 
      { 
       ** Customer Fields ** , 
       Address = new Address { ** Address Fields ** } 
      } 
    }.ForEach(c => context.Customers.Add(c)); 
base.Seed(context); 

내 생각

내 초기 생각은 내가 만들어야한다는 것이다 본질적으로 컴포지트 인 CustomerWithAddress이라는 세 번째 데이터 모델 it는 customeraddress 모델입니다. 이렇게하면 강력한 형식의 뷰를 비계 할 수 있습니다.

또는 제어기가 2 개의 모델을 1보기로 전달할 수 있습니까?

이것이이 문제를 해결하는 가장 좋은 방법인지 또는 실제로 가능한지는 알 수 없습니다. 이견있는 사람?

답변

0

고객 모델에 주소 속성이있는 경우보기에서 액세스 할 수 있습니다. 예 :

@Html.DisplayTextFor(x => model.Address.Addressline1) 

귀하의 뷰 모델 아이디어는 좋지만이 특별한 경우에는 필요하지 않습니다.

편집 : 내 친구가 지적했듯이, 당신은 수동으로 당신이 게으른 로딩을 채용하는 경우 주소 속성을로드해야 할 수도 있습니다.

+0

실제로는'Address' 속성을로드하기 위해'.Include()'를 사용해야 할 수도 있습니다; EF가 게으른 로딩 일이면,'model.Address'는 뷰에 도달하면 null이 될 수 있습니다. – anaximander

+0

좋은 지적. 나는 메모를 할거야. –

관련 문제