首先,我用脚射击自己。我正在构建一个测试应用程序(这是与工作相关的,而不是学校顺便说一句。)我有一个具有外键属性的模型
Home_TeamId
映射到名为
的列 我的数据库中 Home_TeamId
。一切都很开心,直到我重构所有内容以使用ID代替Id。我没有注意到Migration添加了一个名为Home_TeamID1的列,并将数据存储在那里而不是Home_TeamId(我想要的地方。)
所以我想做的是:
删除列Home_TeamID1(没问题,我可以这样做。)
将Home_TeamId重命名为Home_TeamID。 (没问题,我可以这样做。)
告诉EF将数据写入原始列。
我已经阅读了如何在DbContext中使用数据库映射,但这不是我正在尝试做的事情(也就是说,这是一次性的事情,而不是我每次应用时都需要做的事情运行。)(顺便说一句,也没有.edmx文件。)
这就是问题 - 如何告诉EF将域模型中的Home_TeamID字段写入表中的Home_TeamID列?
我应该补充一点,那时我已经完成了另一次迁移,所以它不一定(仅仅)只需要回溯一个版本。
编辑1: EF正在为Home_TeamID和Home_TeamID1列写入相同的团队ID,尽管它已将.ID1文件作为外键。
我在我的项目中随处可见文本“ID1”(文本和二进制Unicode),它显示的唯一地方是* _migration.cs文件。
与此同时,我尝试过上面的步骤1和2。现在(正如预期的那样)我得到了:
InnerException: System.Data.SqlClient.SqlException HResult=-2146232060
Message=Invalid column name 'Home_TeamID1'.
Invalid column name 'Visitors_TeamID1'.
编辑2:
我试过了:
显然问题不在于数据库本身。
答案 0 :(得分:0)
这是一个软件胜过人类的案例。在我的"更高级别" GameSummary课,我有:
public int GameSummaryID { get; set; }
public int Home_TeamID { get; set; }
public virtual Team Home { get; set; }
public int Visitors_TeamID { get; set; }
public virtual Team Visitors { get; set; }
在团队课上,我有:
public int TeamID { get; set; }
因此EF创建了两列,一列用于Home_TeamID(GameSummary类中的字段Home_TeamID),另一列用于Home_TeamID(指向Team对象的导航属性的外键)。解决方案:
public int GameSummaryID { get; set; }
public int HomeTeamID { get; set; }
public virtual Team Home { get; set; }
public int VisitorsTeamID { get; set; }
public virtual Team Visitors { get; set; }