实体框架创建新记录而不是“链接到”现有记录

MrG*_*sen 1 asp.net-mvc entity-framework

数据库

我正在使用IdentityModels向我的ApplicationUser( UserProperties)添加一些额外数据。

这是 UserProperties 类:

    public UserProperties()
    {
        Region = new Region();
        Universe = new Universe();
    }

    public int UserPropertiesId { get; set; }
    public Region Region { get; set; }
    public Universe Universe { get; set; }
Run Code Online (Sandbox Code Playgroud)

手头的问题是,无论何时用户创建帐户,他们都必须选择一个区域和一个宇宙,但实体框架不是将区域和宇宙“链接”到 UserProperties 的条目,而是在 Universe 和区域中创建新的整体,即使为区域和 Universe 提供给 AccountController 的 ID是正确的(即它们存在于数据库中)。

我怎样才能解决这个问题?

如果您需要更多信息,请告诉我。

Bri*_*ton 5

您的问题出在UserProperties构造函数中,您可以在其中创建and 的实例。这些实体与您的数据上下文分离。因此,当您调用并且实体框架看到您的 userproperty 有两个分离的相关实体时,它假定需要创建它们。更多信息RegionUniverseSaveChanges

你需要要么

  1. 像这样手动将区域和 Universe 附加到您的数据上下文context.Regions.Attach(myRegion);
  2. 从数据上下文加载区域和 Universe,以便它们被附加。
  3. 添加外键属性,UserProperties然后设置它们而不是实际实体。

我会选择 3。我发现拥有可用的外键属性总是有用的。

您还需要从构造函数中删除初始化,否则每次保存 UserProperties 时它都会继续创建新的区域和宇宙。<插入弦论笑话>