0

我學習EF代碼第一次與遷移一對多的關係,我有3個實體:一個與級聯給錯誤

[User] 1--->* [Call] 1--->* [ETA] 

代碼:

User.cs

public class User 
{ 
    [Key] 
    public int Id { get; set; } 

    public Guid LongId { get; set; } 

    [Required] 
    public string Name { get; set; } 

    public virtual ICollection<Call> Calls { get; set; } // many calls 

    public User() 
    { 
     LongId = Guid.NewGuid(); 
    } 
} 

Call.cs

public class Call 
{ 
    [Key] 
    public int Id { get; set; } 

    [DatabaseGenerated(DatabaseGeneratedOption.Computed)] 
    public string BreakdownNo { get; private set; } 

    [Required,MaxLength(32)] 
    public string Customer { get; set; } 

    [Required,MaxLength(32)] 
    public string TrailerNo { get; set; } 

    [Required, MaxLength(32)] 
    public string DepotContact { get; set; } 

    [Required, MaxLength(48), RegularExpression(@"^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$")] 
    public string DepotEmail { get; set; } 

    [Required, MinLength(9), MaxLength(32)] 
    public string DepotPhone { get; set; } 

    [Required, MaxLength(32)] 
    public string DriverContact { get; set; } 

    [Required, MinLength(9), MaxLength(32), RegularExpression(@"^(7\d{3}|\(?07\d{3}\)?)\s?\d{3}\s?\d{3}$")] 
    public string DriverPhone { get; set; } 

    [Required, MaxLength(256)] 
    public string LocatedAtFreeText { get; set; } 

    [Required, MaxLength(8), RegularExpression(@"^([A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? {0,1}[0-9][ABD-HJLN-UW-Z]{2}|GIR 0AA)$")] 
    public string LocatedAtPostCode { get; set; } 

    [Required, MaxLength(16)] 
    public string StartupNo { get; set; } 

    [Required] 
    public bool IsLoaded { get; set; } 

    [Required, MaxLength(256)] 
    public string FaultDescription { get; set; } 

    [Required] 
    public DateTime StartTime { get; set; } 

    public DateTime? EndTime { get; set; } 
    public string Status { get; set; } 

    public virtual User Controller { get; set; } // 1 controller 
    public virtual ICollection<ETA> ETAs { get; set; } // many ETAs 

    public Call() 
    { 
     StartTime = DateTime.Now; 
     ETAs = new List<ETA> { new ETA() }; 
     Status = "Logged"; 
    } 
} 

ETA.c

public class ETA 
{ 
    [Key] 
    public int Id { get; set; } 

    [Required] 
    public TimeSpan Value { get; set; } 

    public int CallId { get; set; } 

    public ETA() 
    { 
     Value = TimeSpan.FromMinutes(90); 
    } 
} 

我想它,所以當我刪除它刪除所有CallsUser,進而刪除所有ETAs的那些CallsUser

當我從數據庫中刪除(使用數據庫資源管理器)的用戶排它給了我一個錯誤:

沒有行被刪除。 嘗試刪除第201行時發生問題。 錯誤來源:.Net SqlClient數據提供程序。 錯誤消息:DELETE語句與REFERENCE約束「FK_dbo.Calls_dbo.Users_Controller_Id」衝突。衝突發生在數據庫「BreakdownDb」,表「dbo.Calls」,列'Controller_Id'。

回答

0

解決的辦法是OnModelCreating方法添加到我的DbContext類:

public class BreakdownDb : DbContext 
{ 
    public DbSet<Call> Calls { get; set; } 
    public DbSet<User> Users { get; set; } 

    public BreakdownDb(): base("name=DefaultConnection") {} 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<User>().HasMany(x => x.Calls).WithRequired(); 
     modelBuilder.Entity<Call>().HasMany(x => x.ETAs).WithRequired(); 
    } 
}