实体框架6代码第一外键没有对应的属性

Sti*_*gar 2 c# entity-framework

我的表格看起来像这样

Users
 - UserID (PK)
 - UserName
 - ...

UserSettings
 - UserID (PK)
 - Settings
Run Code Online (Sandbox Code Playgroud)

我的UserSetting实体看起来像这样

public class UserSetting
{
    public UserSetting()
    {
    }

    [Key]
    [Column("UserID", TypeName ="nvarchar(128)")]
    public string ID { get; set; }

    [Required]
    public string Settings { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我希望UserSettings的PK将User中的UserID中的FK添加到UserSettings中的UserID,因为该关系应该是1:1(如果您想知道settings字段是一个字符串,前端只是在数据库中转储为json字符串和后端不关心里面的值)

如果我手动创建数据库并添加外键并且EF对此一无所知,这可以正常工作但我决定尝试让EF为此项目创建数据库.有没有办法告诉EF创建该FK而不添加与任一实体的关系的实体属性?

oct*_*ccl 5

要在Code First中创建关系,您需要在两端之一中至少具有导航属性(这种关系称为单向关系).典型的一对一关系配置如下:

public class User
{
    public User()
    {
    }

    [Key]
    [Column("ID", TypeName ="nvarchar(128)")]
    public string ID { get; set; }

    public string Name{ get; set; }

    public virtual UserSetting UserSetting {get;set;} 
}

public class UserSetting
{
    public UserSetting()
    {
    }

    [Key,ForeignKey("User"),Column("UserID")]
    public string ID { get; set; }

    //...

    public virtual User User{get;set;}
}
Run Code Online (Sandbox Code Playgroud)

现在,使用此模型,您不会向表中添加任何新列,它将是相同的,只是现在您将UserSettings表的PK配置为关系的FK(您要实现的目标).

现在,正如我所说EF需要至少一个导航属性来创建关系.因此,如果需要,您可以删除UserSetting导航.property on User,没关系,将数据注释保留在Idof UserSettingUser导航属性上足以使Code First创建关系.