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

时间:2014-04-30 16:44:42

标签: asp.net-mvc entity-framework

Database

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

这是UserProperties类:

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

    public int UserPropertiesId { get; set; }
    public Region Region { get; set; }
    public Universe Universe { get; set; }

手头的问题是,无论何时用户创建帐户,他们都必须选择区域和Universe,但不是将区域和Universe“链接”到UserProperties的条目,而是实体框架创建 new 的AccountController的ID (即它们存在于数据库中),也可以在Universe和区域中进行操作。

我该如何解决这个问题?

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

2 个答案:

答案 0 :(得分:3)

您的问题出在UserProperties构造函数中,您可以在其中创建RegionUniverse实例。这些实体将从您的datacontext中分离出来。因此,当您调用SaveChanges并且实体框架看到您的userproperty有两个已分离的相关实体时,它会假定需要创建它们。 More info

你需要

  1. 将区域和Universe手动附加到您的datacontext,如context.Regions.Attach(myRegion);
  2. 从datacontext加载区域和Universe,以便附加它们。
  3. 将外键属性添加到UserProperties,然后设置它们而不是实际实体。
  4. 我会选择3.我发现拥有外键属性总是有用的。

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

答案 1 :(得分:0)

试试这个

public int UserPropertiesId { get; set; }
public int RegionId{get;set;}//should be the key of Region table
public Region Region { get; set; }
public int UniverseId{get;set;}//should be the key of Universe table
public Universe Universe { get; set; }

这应该进行链接。

查看this博客