【发布时间】:2013-07-03 11:30:51
【问题描述】:
按照Pluralsight "Getting Started with Entity Framework 5" course by Julie Lerman 的“代码优先建模”部分,我创建了两个具有一对零或一 关系的 POCO 类:一个父级(用户)和一个 可选子(UserDetail)。
User and UserDetail data model diagram (click to view).
请注意图中UserId 属性是UserDetail 的主键和外键。
相关代码:
public class User
{
//...
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
/* Has a 1:0..1 relationship with UserDetail */
public virtual UserDetail UserDetail { get; set; }
//...
}
public class UserDetail
{
//...
/* Has a 0..1:1 relationship with User */
public virtual User User { get; set; }
[Key, ForeignKey("User")]
public int UserId { get; set; }
//...
}
public class EFDbContext : DbContext
{
public DbSet<User> Users { get; set; }
//public DbSet<UserDetail> UserDetails { get; set; } /* Explicit declaration not necessary. Context is aware of UserDetail entity due to 0..1:1 relationship with User */
public EFDbContext()
{
Configuration.ProxyCreationEnabled = true;
Configuration.LazyLoadingEnabled = true;
}
}
public class UserRepository : IUserRepository
{
private EFDbContext _context = new EFDbContext();
public void Delete(User entity)
{
entity = _context.Users.Find(entity.UserId);
//...
_context.Users.Remove(entity);
_context.SaveChanges();
//...
}
}
调用UserRepository类中的Delete()方法时,不会删除数据库中的User记录,因为UserDetail中的外键没有级联删除。
DELETE 语句与 REFERENCE 约束“FK_dbo.UserDetail_dbo.User_UserId”冲突。
如何使用实体框架代码优先为一对零或一关系启用级联删除(以便删除用户自动删除 UserDetail)?
【问题讨论】:
标签: c# entity-framework ef-code-first entity-framework-5 cascading-deletes