在代码中首先使用外键的1对1关系EF 6

时间:2015-07-29 16:37:50

标签: c# entity-framework relational-database fluent

我在代码第一个实体框架中有一个场景,我需要两个表之间的foriegn键约束为1比1,而不使用两个表的主键。

鉴于以下模型:

public class Appointment
{
    [Key]
    public int Id { get; set; }
}

public class InitialAppointment : Appointment
{
    public int UserId { get; set; }

    [ForeignKey("UserId")]
    public User User { get; set; }
}

public class User
{
    [Key]
    public int Id { get; set; }

    public string UserName { get; set; }

    public InitialAppointment InitialAppointment { get; set; }
}

User只能有1个可选initial appointment,初始约会继承自Appointment:所以我希望所有3个表之间的关系为1 - 1,但是用户记录和约会记录可以自己存在。但是,没有用户或约会,初始约会就不可能存在。

当我尝试实现这一点时,我使用了Fluent API来指定以下内容(以及上面的注释):

modelBuilder.Entity<User>()
            .HasOptional<InitialAppointment>(u => s.InitialAppointment)
            .WithRequired();

问题是实体框架没有正确创建表,它们的生成方式如下:

enter image description here

如何通过数据注释或Fluent API告知实体框架用户应该与初始约会和初始约会有一个可选的1 - 1关系应该与约会继承(通过1 - 1关系)吗?