2013-03-22 3 views
1

У меня есть небольшая проблема.MVC Модель Poco класс, дизайн,

Я пытаюсь создать класс адреса, я сохраняю все адреса своих приложений.

Дело в том, что я хочу иметь возможность связывать несколько адресов как с клиентом, так и с компанией.

Может кто-нибудь, пожалуйста, покажите мне, как я должен его проектировать?

Сначала я использую 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

В следующих свойств и аннотации к вашим классам, это должно помочь Entity Framework понять ваши отношения:

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;} 
} 

EDIT: Теперь у вас есть вопрос другого типа. Правила DELETE/UPDATE вызывают ошибку, которую вы видите прямо сейчас. Скорее всего, вы установили CASCADE delete на несколько путей, которые ведут к той же таблице первичных ключей. Для запуска установить все ваши отношения, которые выглядят следующим образом:

enter image description here enter image description here

Тогда предположим, такой сценарий: У вас есть объекты A, B и C. Entity B имеет FK для объекта A. Entity C имеет FK к объекту A и объекту B.

Вы можете установить каскадное удаление/обновление только на одном пути зависимости. Это означает, что вы можете сделать только:

каскадное удаление между А и В и каскадное удаление между B и C.

Однако, если вы добавить каскадное удаление между А и С, а также наряду с выше, вы получите ошибка, которую вы сейчас имеете.

+0

Когда я использую это я получаю эту ошибку сообща, когда им пытается показать компании: Вводя ограничение FOREIGN KEY «FK_dbo.Customer_dbo.Company_CompanyId» на столе «клиент» может вызвать циклы или несколько путей порогов. Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION или измените другие ограничения FOREIGN KEY. – 2013-03-23 11:07:04

+0

Теперь это вопрос другого рода, я обновил сообщение с большим количеством объяснений и изображений. –

+0

Я не знаю, если это только я, но я не могу найти страницу, которую вы показываете, это в VS2012 или в sql-менеджере? – 2013-04-22 19:30:30

Смежные вопросы