作者:作小die_syj | 来源:互联网 | 2023-10-14 15:53
我有3个实体:地址,学生和教师.这是关系图:实体类:publicclassStudent{publicintId{get;set;}publicstringName{get;set
我有3个实体:地址,学生和教师.这是关系图:
实体类:
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public Address Address { get; set; }
}
public class Faculty
{
public int Id { get; set; }
public string Name { get; set; }
public Address Address { get; set; }
}
public class Address
{
public int Id { get; set; }
public string Street { get; set; }
public Student Student { get; set; }
public Faculty Faculty { get; set; }
}
在我的Context文件中,我定义了关系并将cascade delete设置为true:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasRequired(s => s.Address)
.WithOptional(a => a.Student)
.WillCascadeOnDelete(true);
modelBuilder.Entity()
.HasRequired(s => s.Address)
.WithOptional(a => a.Faculty)
.WillCascadeOnDelete(true);
}
我的用例是当我删除Student或Faculty对象时,我也希望删除相关的Address.但是,它以其他方式工作.
有什么想法/建议吗?
解决方法:
正确的答案是将所有Address列移动到Student / Faculty表中.
然后,为了使EF对您的对象模型满意,可以使用Address类的ComplexType属性.
https://msdn.microsoft.com/en-us/data/jj591583.aspx?f=255&MSPPError=-2147217396
我说这是“正确答案”的部分原因是你没有解决两个学生共享同一地址记录的问题.您的对象模型中没有任何内容阻止它发生,如果它发生了,那么当您尝试删除一个学生时会发生什么?