Fre*_*cke 4 c# asp.net-mvc entity-framework
我仍然在使用EF.我在我的项目中使用代码优先方法并偶然发现了以下问题.
我有以下对象:
public class Employee
{
public int EmployeeId { get; set; }
public int BusinessUnitId { get; set; }
public virtual BusinessUnit BusinessUnit { get; set; }
}
public class Quote
{
public int QuoteId { get; set; }
[DisplayName("Business Unit")]
public int BusinessUnitId { get; set; }
[DisplayName("Responsible Employee")]
public int EmployeeId { get; set; }
[DisplayName("Date Issued")]
[DataType(DataType.Date)]
public DateTime DateIssued { get; set; }
[DataType(DataType.MultilineText)]
public string Description { get; set; }
public virtual Employee Employee { get; set; }
public virtual BusinessUnit BusinessUnit { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
两者都包含BusinessUnit属性,似乎EF不想允许这样做.当执行带有一堆包含的Linq查询时,看到我在Index()方法下面得到以下错误.
在表'Quotes'上引入FOREIGN KEY约束'FK_dbo.Quotes_dbo.BusinessUnits_BusinessUnitId'可能会导致循环或多个级联路径.指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束.无法创建约束.查看以前的错误.
有人可以向我解释为什么我会收到此错误以及我可能会如何修复它.谢谢.
编辑:
这绝对是由于在Quote对象和Employee对象中都包含BusinessUnit属性.我只是不明白为什么.
编辑2:
BusinessUnit类的代码:
public class BusinessUnit
{
public int BusinessUnitId { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在,如果您尝试删除Employee,它将尝试删除Quote,该Quote的BusinessUnit,然后删除该BusinessUnit的Employees等.
要么使某些关系可选,要么关闭级联约定,如下所示:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// Either entirely
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
// or for one model object
modelBuilder.Entity<Person>()
.HasRequired(p => p.Department)
.WithMany()
.HasForeignKey(p => p.DepartmentId)
.WillCascadeOnDelete(false);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6978 次 |
| 最近记录: |