2013-03-22 3 views
1

나는 약간의 문제가있다.MVC 모델 Poco 클래스, 디자인 문제,

저는 모든 응용 프로그램의 주소를 저장 했으므로 Address 클래스를 만들려고합니다.

나는 고객과 회사 모두에게 여러 개의 주소를 연결할 수 있기를 바랍니다.

누군가 디자인 할 수있는 방법을 보여줄 수 있습니까?

MVC 4를 먼저 entityFramework 코드와 함께 사용합니다. 수업에 다음과 같은 특성과 주석에서

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

     public string Street { get; set; } 

     public string Number { get; set; } 

     public string ZipCode { get; set; } 

     public int CountyId { get; set; } 
     public virtual County County { get; set; } 

     public int StateId { get; set; } 
     public virtual State State { get; set; } 

     public int CountryId { get; set; } 
     public virtual Country Country { get; set; } 
    } 

public class Customer 
    { 
     [Key] 
     public int CustomerId { get; set; } 
     public int CompanyId { get; set; } 

     [Display(Name = "Kund")] 
     public string Name { get; set; } 

     public virtual Company Company { get; set; } 

     // wan't to display a ICollection of addresses. 
     //public virtual ICollection<Address> Addresses { get; set; } 
    } 

public class Company 
    { 
     [Key] 
     public int CompanyId { get; set; } 
     [Display(Name = "Organisationsnummer")] 
     public string OrganisationNumber { get; set; } 
     [Display(Name = "Företag")] 
     public string Name { get; set; } 
     [Display(Name = "Företag skapat")] 
     public DateTime CreationDate { get; set; } 

     public virtual ICollection<Customer> Customers { get; set; } 
     public virtual ICollection<Employee> Employees { get; set; } 
     // wan't to display a ICollection of addresses. 
     //public virtual ICollection<Address> Addresses { get; set; } 
    } 

답변

2

, 그것은 엔티티 프레임 워크는 당신의 관계를 이해하는 데 도움이 될 것입니다

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

    public string Street { get; set; } 

    public string Number { get; set; } 

    public string ZipCode { get; set; } 

    public int CustomerId {get;set;} 
    [ForeignKey("CustomerId")] 
    public virtual Customer Customer {get;set;} 

    public int CompanyId {get;set;} 
    [ForeignKey("CompanyId")] 
    public virtual Company Company {get;set;} 

    public int CountyId { get; set; } 
    [ForeignKey("CountyId")] 
    public virtual County County { get; set; } 

    public int StateId { get; set; } 
    [ForeignKey("StateId")] 
    public virtual State State { get; set; } 

    public int CountryId { get; set; } 
    [ForeignKey("CountryId")] 
    public virtual Country Country { get; set; } 
} 

public class Customer 
{ 
    [Key] 
    public int CustomerId { get; set; } 

    public int CompanyId { get; set; } 

    [Display(Name = "Kund")] 
    public string Name { get; set; } 

    [ForeignKey("CompanyId")] 
    public virtual Company Company { get; set; } 

    [InverseProperty("Customer")] 
    public virtual ICollection<Address> Addresses { get; set; } 
} 



public class Company 
{ 
    [Key] 
    public int CompanyId { get; set; } 
    [Display(Name = "Organisationsnummer")] 
    public string OrganisationNumber { get; set; } 
    [Display(Name = "Företag")] 
    public string Name { get; set; } 
    [Display(Name = "Företag skapat")] 
    public DateTime CreationDate { get; set; } 

    [InverseProperty("Company")] 
    public virtual ICollection<Customer> Customers { get; set; } 

    [InverseProperty("Company")] 
    public virtual ICollection<Address> Addresses { get; set; } 

    [InverseProperty("Company")] 
    public virtual ICollection<Employee> Employees { get; set; } 

} 

public class Employee 
{ 
[Key] 
public int EmployeeId {get;set;} 

public int CompanyId {get;set;} 

[ForeignKey("CompanyId")] 
public virtual Company Company {get;set;} 
} 

편집 : 이제 또 다른 유형의 문제를 가지고있다. 귀하의 DELETE/UPDATE 규칙에 의해 지금보고있는 오류가 발생하고 있습니다. 동일한 기본 키 테이블로 이어지는 여러 경로에서 CASCADE 삭제를 설정했을 가능성이 큽니다.

enter image description here enter image description here

그런 다음이 시나리오 가정 : 다음과 같이 시작 설정 모든 관계의 A, B와 C 엔티티 B는 엔티티 A에 FK를 가지고 당신은 실체가를 법인 C가있다 FK를 엔티티 A와 엔티티 B에 할당하십시오.

하나의 종속 경로에서만 계단식 삭제/업데이트를 설정할 수 있습니다. 이것은 당신이 할 만 할 수 있다는 것을 의미 :

캐스케이드는 그러나 계단식뿐만 아니라 이상과 함께 A와 C 사이에 삭제 추가 할 경우 B와 C

사이에 삭제 A와 B와 폭포 사이에 삭제, 당신은 얻을 것이다 당신이 지금 가지고있는 오류. 사이클 또는 여러 개의 계단식 경로를 일으킬 수 테이블 '고객'에 FOREIGN KEY 제약 조건 'FK_dbo.Customer_dbo.Company_CompanyId'를 소개 : 내가 이것을 사용하면

+0

내가 메신저 회사를 보여 주려이 오류 MSG를 얻을. NO DELETE NO ACTION 또는 UP UP NO NO ACTION을 지정하거나 다른 FOREIGN KEY 제약 조건을 수정하십시오. –

+0

그것은 다른 종류의 문제입니다. 나는 더 많은 설명과 이미지로 내 게시물을 업데이트했습니다. –

+0

나는 그것이 단지 나를 알지 못한다. 그러나 나는 당신이 보여주고있는 페이지를 찾을 수 없다. VS2012 또는 SQL 매니저에 있는가? –