如何更新EF 6中的外键 - 代码优先 - 一对多关系

时间:2017-06-06 08:07:42

标签: c# sql-server entity-framework-6

根据此问题中提供的解决方案:How to update foreign key in EF 6 - Code First,我可以使用id字段更新外键。

但是现在,从数据库中获取实体时会出现异常。使用此代码:

// Retrieve data first
using (var db = new TestDbContext())
{
    var p2 = db.Persons.First();
}

我收到以下SqlException:"列名无效' Country_Id1'。"

是否有人有任何线索能够检索数据来更新外键? 以另一种方式问,是否可以使用导航属性来简化我的实体的使用和外键的id,以便能够更新我的依赖实体?

我的实体

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual Country Country { get; set; }
    public int Country_Id { get; set; }
}

public class Country
{
    public int Id { get; set; }
    public string Name { get; set; }
}

1 个答案:

答案 0 :(得分:2)

这可能是因为实体框架正试图根据Country实体中的导航属性Person创建新的外键。

我认为您应该使用Country_Id属性注释ForeignKey属性,如下所示。

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    [ForeignKey("Country_Id")]
    public virtual Country Country { get; set; }
    public int Country_Id { get; set; }
}

但是,如果您按照以下命名属性的ef命名约定,则无需对其进行注释。

  

与主要主键具有相同数据类型的任何属性   属性,名称遵循以下格式之一   表示关系的外键:'',''或''

您可以从here

了解更多信息
public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual Country Country { get; set; }
    public int CountryId { get; set; }
}

注意:您可能需要运行数据库迁移或需要重新创建数据库。