gpt4 book ai didi

c# - Entity Framework 6 Code First 外键无相应属性

转载 作者:行者123 更新时间:2023-12-03 22:16:50 30 4
gpt4 key购买 nike

我的表格看起来像这样

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

UserSettings
- UserID (PK)
- Settings

我的 UserSetting 实体如下所示

public class UserSetting
{
public UserSetting()
{
}

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

[Required]
public string Settings { get; set; }
}

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

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

最佳答案

要在 Code First 中创建关系,您需要在两端至少有一个导航属性(这种关系称为单向关系)。典型one to one relationship配置如下:

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;}
}

现在,使用此模型,您无需向表中添加任何新列,一切都是一样的,只是现在您将 UserSettings 表的 PK 配置为关系的 FK (您想要实现的目标)。

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

关于c# - Entity Framework 6 Code First 外键无相应属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32439122/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com