【问题标题】:Entity Framework - Fluent API Many-toMany实体框架 - Fluent API 多对多
【发布时间】:2014-08-04 10:34:34
【问题描述】:

我似乎无法纠正两个实体之间的约束问题。有人看到我的错误吗?

1.街道地址实体:

public class StreetAddress : BaseEntity
{
    // backing fields
    private ICollection<Employee> _employees;

    public StreetAddress()
    {
        _employees = new Collection<Employee>();
    }

   ......

    // foreign keys
    public int Fk_CountryId { get; set; }
    public int Fk_StateProvinceId { get; set; }

    // associations
    /// Country
    [ForeignKey("Fk_CountryId")]
    public Country Country { get; set; }
    /// StateProvince
    [ForeignKey("Fk_StateProvinceId")]
    public StateProvince StateProvince { get; set; }

    // collections
    public ICollection<Employee> Employees
    {
        get { return _employees; }
        set { _employees = value; }
    }
  }

1.员工实体:

public partial class Employee : BaseEntity
{
    // backing fields
    private ICollection<StreetAddress> _streetAddresses;

    public Employee()
    {
        _streetAddresses = new Collection<StreetAddress>();
    }

    // foreign keys
    [Required]
    public string Fk_ApplicationUserId { get; set; }
    public int Fk_ClientId { get; set; }
    public int Fk_PersonId { get; set; }

    #region association
    // association
    /// application users 
    [ForeignKey("Fk_ApplicationUserId")]
    public ApplicationUser ApplicationUser { get; set; }

    /// client company
    [ForeignKey("Fk_ClientId")]
    public ClientCompany ClientCompany { get; set; }

    /// person
    [ForeignKey("Fk_PersonId")]
    public Person Person { get; set; }

    /// region
    [ForeignKey("RegionId")]
    public virtual Region Region { get; set; }
    #endregion association


    /// StreetAddresses
    public ICollection<StreetAddress> StreetAddresses
    {
        get { return _streetAddresses; }
        set { _streetAddresses = value; }
    }
}

}

3.映射:

       modelBuilder.Entity<Employee>()
            .HasRequired(e => e.Region)
            .WithMany()
            .HasForeignKey(r => r.RegionId)
            .WillCascadeOnDelete(false);


        modelBuilder.Entity<Employee>()
            .HasRequired(e => e.ClientCompany)
            .WithMany()
            .HasForeignKey(r => r.Fk_ClientId)
            .WillCascadeOnDelete(false);

        modelBuilder.Entity<Employee>()
            .HasRequired(e => e.Person)
            .WithMany()
            .HasForeignKey(r => r.Fk_PersonId)
            .WillCascadeOnDelete(false);

        modelBuilder.Entity<Employee>()
            .HasKey(c => c.Id)
            .HasMany(c => c.StreetAddresses)
            .WithMany(c => c.Employees)

            .Map(c =>
            {
                c.MapLeftKey("EmployeeId");
                c.MapRightKey("AddressId");
                c.ToTable("EmployeeLocations");
            }
            );

        modelBuilder.Entity<StreetAddress>()
            .HasRequired(e => e.StateProvince)
            .WithMany()
            .HasForeignKey(r => r.Fk_StateProvinceId)
            .WillCascadeOnDelete(false);

        modelBuilder.Entity<StreetAddress>()
            .HasRequired(e => e.Country)
            .WithMany()
            .HasForeignKey(r => r.Fk_CountryId)
            .WillCascadeOnDelete(false);
    }

错误:

在表“EmployeeStreetAddresses”上引入 FOREIGN KEY 约束“FK_dbo.EmployeeStreetAddresses_dbo.StreetAddresses_StreetAddress_Id”可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。 无法创建约束。查看以前的错误。

【问题讨论】:

    标签: entity-framework fluent-interface


    【解决方案1】:

    解决方案:

    问题在于地址和员工都喜欢与客户建立联系。为了解决这个问题,我映射了以下内容:

            modelBuilder.Entity<ClientCompany>()
                .HasKey(c => c.Id)
                .HasMany(c => c.StreetAddresses)
                .WithRequired(c => c.Client)
                .WillCascadeOnDelete(false);
    
            modelBuilder.Entity<ClientCompany>()
                .HasKey(c => c.Id)
                .HasMany(c => c.Employees)
                .WithRequired(c => c.Client)
                .WillCascadeOnDelete(false);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多