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而不添加与任一实体的关系的实体属性?
要在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 UserSetting和User导航属性上足以使Code First创建关系.