MVC Model Poco类,设计问题,

时间:2013-03-22 22:26:16

标签: asp.net-mvc entity-framework asp.net-mvc-4 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; }
    }

1 个答案:

答案 0 :(得分: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对实体A和实体B具有FK。

您只能在一个依赖关系路径上设置级联删除/更新。这意味着您只能这样做:

A和B之间的级联删除以及B和C之间的级联删除。

但是如果您在A和C之间添加级联删除以及上面的内容,则会出现错误。