3

我有两张桌子,想在另一张桌子上使用其中一张的 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表中删除一个值,会发生级联删除吗?)

4

1 回答 1

5

如何使用 Fluent API 实现这一点?

modelBuilder.Entity<Student>()
    .HasRequired(s => s.User)
    .WithOptional();

如果我从学生表中删除一个值,将进行级联删除。

不,因为Student是关系中的依赖项(它带有外键)而不是主体(即User)。仅当您删除主体时,级联删除才有效。对于一对一的关系,您必须手动启用它:

modelBuilder.Entity<Student>()
    .HasRequired(s => s.User)
    .WithOptional()
    .WillCascadeOnDelete(true);

现在,如果 aUser被删除,相关的Student(如果有的话)也将被删除。

于 2013-01-24T20:00:34.580 回答