1

少し問題があります。

すべてのアプリケーションのアドレスを保存する Address クラスを作成しようとしています。

問題は、複数のアドレスを顧客と会社の両方にリンクできるようにしたいということです。

誰かが私がそれをどのように設計すべきか教えてもらえますか?

最初にentityFrameworkコードでMVC 4を使用します。

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

1 に答える 1

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

編集: 別のタイプの問題が発生しました。DELETE/UPDATE ルールが原因で、現在表示されているエラーが発生しています。同じ主キー テーブルにつながる複数のパスに CASCADE 削除を設定した可能性があります。まず、次のようなすべての関係を設定します。

ここに画像の説明を入力 ここに画像の説明を入力

次に、次のシナリオを想定します。エンティティ A、B、および C があり、エンティティ B にはエンティティ A への FK があります。エンティティ C には、エンティティ A およびエンティティ B への FK があります。

カスケード削除/更新は、1 つの依存関係パスにのみ設定できます。これは、次のことしかできないことを意味します。

A と B の間のカスケード削除と、B と C の間のカスケード削除。

ただし、上記と同様に A と C の間にカスケード削除を追加すると、現在発生しているエラーが発生します。

于 2013-03-23T05:34:29.280 に答える