2017-08-28 3 views
1

Fehler: Einführung der FOREIGN KEY-Einschränkung 'FK_dbo.TenantUnits_dbo.Units_Unit_Id' auf der Tabelle 'TenantUnits' kann Zyklen oder mehrere Kaskadenpfade verursachen. Geben Sie ON DELETE NO ACTION oder ON UPDATE NO ACTION an, oder ändern Sie andere FOREIGN KEY-Einschränkungen.Entity Framework viele bis viele kaskadierende Einschränkungen

Ich weiß, dass dieser Fehler etwas mit der Art der Beziehungen in meinem Modell zu tun hat, aber ich bin viel zu verwirrt, um es zu lösen. Es fällt mir schwer, mich an Kaskaden und viele bis viele Beziehungen zu erinnern, die an meinem Modell beteiligt sind.

Modelle sind wie folgt:

public class Complex 
{ 
    [Key] 
    public Guid Id { get; set; } 
    public string Name { get; set; } 

    public Guid AddressId { get; set; } 

    [ForeignKey("AddressId")] 
    public virtual Address Address { get; set; } 

    public virtual ICollection<Unit> Units { get; set; } 

    public Complex() 
    { 
     this.Id = System.Guid.NewGuid(); 
     this.Units = new HashSet<Unit>(); 
    } 

    public void AddUnit(Unit unit) 
    { 
     Units.Add(unit); 
    } 
} 

public class Unit 
{ 
    [Key] 
    public Guid Id { get; set; } 
    public string Name { get; set; } 

    public Guid ComplexId { get; set; } 
    [ForeignKey("ComplexId")] 
    public virtual Complex Complex { get; set; } 

    public virtual ICollection<Tenant> Tenants { get; set; } 

    public Unit() 
    { 
     this.Id = System.Guid.NewGuid(); 
     this.Tenants = new HashSet<Tenant>(); 
    } 

    public void AddTenant(Tenant tenant) 
    { 
     Tenants.Add(tenant); 
    } 
} 

public class Tenant 
{ 
    [Key] 
    public Guid Id { get; set; } 
    public string UserId { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 

    public Guid ContactInfoId { get; set; } 
    [ForeignKey("ContactInfoId")] 
    public ContactInfo ContactInfo { get; set; } 

    public virtual ICollection<Unit> Units { get; set; } 

    public Tenant() 
    { 
     this.Id = System.Guid.NewGuid(); 
     this.Units = new HashSet<Unit>(); 
    } 
} 

public class Address 
{ 
    [Key] 
    public Guid Id { get; set; } 
    public string Address1 { get; set; } 
    public string Address2 { get; set; } 
    public string City { get; set; } 
    public string State { get; set; } 
    public string Zip { get; set; } 

    public Address() 
    { 
     this.Id = System.Guid.NewGuid(); 
    } 
} 

public class ContactInfo 
{ 
    [Key] 
    public Guid Id { get; set; } 

    public Guid AddressId { get; set; } 
    [ForeignKey("AddressId")] 
    public Address Address { get; set; } 
    public string Phone1 { get; set; } 
    public string Phone2 { get; set; } 
    public string Email { get; set; } 

    public ContactInfo() 
    { 
     this.Id = System.Guid.NewGuid(); 
    } 
} 

EDIT: Ich habe den Fehler behoben durch modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>(); Zugabe, aber ich verstehe immer noch nicht in vollem Umfang die Wirkungen und/oder wie es funktioniert - oder, wenn dies auch, was ich muss verwendet werden.

Antwort

0

Eine ICollection wird verwendet, um eine Eins-zu-Viele- oder Viele-zu-Viele-Beziehung zwischen Entitäten zu definieren. In Ihrer Klasse "Complex" haben Sie eine ICollection von "Unit" definiert. In der Complex-Klasse ist jedoch keine Fremdschlüsseleigenschaft "UnitId" definiert, die dem Primärschlüssel der Einheitenentität entspricht. Entity Framework ordnet die "ID" der komplexen Klasse der "ID" der Unit-Klasse zu. (Annahme: Id der Einheit, Komplex und Mieter sind unterschiedlich). Dies könnte der Grund für den Fehler sein. Definieren Sie eine "UnitId" -Eigenschaft und fügen Sie der Sammlung "Units" ein Fremdschlüsselattribut hinzu. In ähnlicher Weise beheben Sie Ihre Mandanten- und Einheitenklasse.

Verwandte Themen