我有两张桌子,想要在另一张桌子上使用其中一张PK作为PK。
这是我使用数据注释的实现:
public class User
{
public System.Guid UserId { get; set; }
public string UserName { get; set; }
}
public class Student
{
[Key, ForeignKey("User")]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public System.Guid StudentId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
// shared primary key
public virtual User User { get; set; }
}
此处Student
表格使用User
的主键。
如何使用Fluent API实现此功能?
(作为第二个问题,如果我从Student
表中删除一个值,是否会进行级联删除?)
答案 0 :(得分:5)
如何使用Fluent API实现此功能?
modelBuilder.Entity<Student>()
.HasRequired(s => s.User)
.WithOptional();
如果我从Student表中删除一个值,则会进行级联删除。
不,因为Student
是关系中的依赖(它携带外键)而不是主体(User
)。级联删除仅在删除主体时有效。对于一对一关系,您必须手动启用它:
modelBuilder.Entity<Student>()
.HasRequired(s => s.User)
.WithOptional()
.WillCascadeOnDelete(true);
现在,如果User
被删除,相关的Student
(如果有的话)也会被删除。