实体框架:如何使用Fluent API实现共享主键?

Bla*_*azi 3 asp.net asp.net-mvc entity-framework data-annotations

我有两个表,并希望使用其中一个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; }
}
Run Code Online (Sandbox Code Playgroud)

这里Student使用表User的主键.

如何使用Fluent API实现此功能?

(作为第二个问题,如果我从Student表中删除一个值,会产生级联删除吗?)

Sla*_*uma 5

如何使用Fluent API实现此功能?

modelBuilder.Entity<Student>()
    .HasRequired(s => s.User)
    .WithOptional();
Run Code Online (Sandbox Code Playgroud)

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

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

modelBuilder.Entity<Student>()
    .HasRequired(s => s.User)
    .WithOptional()
    .WillCascadeOnDelete(true);
Run Code Online (Sandbox Code Playgroud)

现在,如果User删除了相关的Student(如果有的话),也会被删除.