gpt4 book ai didi

c# - 尽管具有有效的外键, Entity Framework 仍不生成导航属性

转载 作者:行者123 更新时间:2023-12-02 17:45:44 24 4
gpt4 key购买 nike

我见过类似的问题,但我没有看到它们和我的问题之间的联系,我认为我的问题比那些简单得多。

我使用代码优先的 EF 方法,该方法工作正常,直到我开始向模型添加显式数据注释(RequiredForeignKey)

这可能是 EF 身份问题,或者只是 EF 代码优先问题

我的模型:

public class GroupMembership
{
public int ID { get; set; }
public int GroupID { get; set; }
public string UserID { get; set; }

[Required, ForeignKey("GroupID")]
public virtual Group Group { get; set; }
[Required, ForeignKey("UserID")]
public virtual ApplicationUser User { get; set; }
}

现在问题是当我尝试添加实例时:

GroupMembership grpMem = new GroupMembership()
{
GroupID = grpID,
UserID = userID,
};
context.GroupMemberships.Add(grpMem);
context.SaveChanges();

尝试调用 SaveChanges() 时出现错误,经过仔细检查,我发现 ApplicationUser 导航属性为 null,尽管具有有效的 UserID 。同时,使用GroupID成功生成了Group导航属性。

UserID 是与当前 ApplicationUser 关联的字符串 ID,我使用

检索它
string userId = User.Identity.GetUserId();

最佳答案

尝试将所需的注释移至字段而不是导航属性,如下所示:

public class GroupMembership
{
public int ID { get; set; }
[Required]
public int GroupID { get; set; }
[Required]
public string UserID { get; set; }
[ForeignKey("GroupID")]
public virtual Group Group { get; set; }
[ForeignKey("UserID")]
public virtual ApplicationUser User { get; set; }
}

说实话,我不知道为什么 groupID 会起作用,除非它在编辑之前就被保存了。

请注意,您收到了错误,因为您没有在代码中设置 nav 属性,而只是设置了外键值,这也是您需要移动注释的原因。

作为替代方案,我认为您可以保留必需的注释,以防您在 savechanges() 之前在代码中设置它。

关于c# - 尽管具有有效的外键, Entity Framework 仍不生成导航属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33597667/

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