根据此问题中提供的解决方案: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; }
}
答案 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; }
}
注意:您可能需要运行数据库迁移或需要重新创建数据库。