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

时间:2013-01-24 10:21:38

标签: 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; }
}

此处Student表格使用User的主键。

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

(作为第二个问题,如果我从Student表中删除一个值,是否会进行级联删除?)

1 个答案:

答案 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(如果有的话)也会被删除。