2015-04-29 4 views
2

У меня есть следующее entites в моем проекте MVC (код первого подход) Я хочу знать, что причина того, что я получаю следующее сообщение об ошибкеВводя FOREIGN KEY ограничение может вызвать циклы или несколько путей каскадных

Представление ограничения FOREIGN KEY 'FK_dbo.VendorDetails_dbo.States_StateID' в таблице 'VendorDetails' может вызвать циклы или несколько каскадных путей. Укажите ON DELETE NO ACTION или ОБНОВИТЬ НЕТ ДЕЙСТВИЙ или изменить другие ограничения FOREIGN KEY. Может ли не создавать ограничение. См. Предыдущие ошибки.

Я просто хотел бы знать, какие таблицы получают несколько путей каскадные любая схема будет эффективной, и что я должен написать с помощью текучего API, как это: modelBuilder.Entity<...>() .HasRequired(...) .WithMany(...) .HasForeignKey(...) .WillCascadeOnDelete(false);

public class VendorDetails 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int VendorID { get; set; }   
    [MaxLength(60)] 
    public string VendorName { get; set; }   

    public int VendorTypeID { get; set; } 
    public int CountryID { get; set; } 
    public int StateID { get; set; }   

    [NotMapped] 
    public string CountryName { get; set; } 
    [NotMapped] 
    public string StateName { get; set; } 
    [NotMapped] 
    public string VendorTypeName { get; set; } 

    public virtual Country Country { get; set; } 
    public virtual State State { get; set; } 
    public virtual VendorType VendorType { get; set; } 
} 

public class VendorType 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int VendorTypeID { get; set; }     

    public string VendorTypeName { get; set; } 

    public virtual ICollection<VendorDetails> Vendors { get; set; } 
} 


public class Country 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int CountryID { get; set; } 
    public string CountryName { get; set; } 

    public virtual ICollection<State> States { get; set; } 
} 

public class State 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int StateID { get; set; } 
    public string StateName { get; set; } 

    public int CountryID { get; set; } 
    public virtual Country Country { get; set; } 
} 

ответ

2

Вы получаете это потому, что страна имеет ссылку на государство, а VendorDetails имеет ссылку на страну и государство. Это дает несколько путей между VendorDetails и State - один через страну и один прямой.

Я бы отключить каскадное удаление на ссылку, чтобы заявить от VendorDetails:

modelBuilder 
    .Entity<VendorDetails>() 
     .HasOptional(e => e.State) 
     .WithMany() 
     .WillCascadeOnDelete(false); 
+0

Благодаря @Richard это вещь, которую я хотел бы знать, как я растерялась я должен сделать или , так как у меня есть некоторые другие модели, которые также используют модели стран и штатов –

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

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