目前在EF Core 6上.如果这很重要,我使用的是MySQL数据库.
我有两个数据库模型,它们是基于当前生产环境中的现有遗留数据库自动生成的.我的任务是将这些数据从遗留数据库导入到新的数据库模式中.因为这是在生产中,所以我不能为了我要问的问题而修改数据库的模式.
该数据库有相关的表.我们称它们为Widget和WidgetBlocker.Widget有一个uint类型的主键,并且与WidgetBlocker存在多对多关系.WidgetBlocker有一个指向Widget的外键,但数据类型(我不知道原因)是可以为空的int.这意味着我的课程看起来像这样.
public class Widget
{
public uint WidgetId { get; set; }
.
.
.
}
public class WidgetBlocker
{
public uint WidgetBlockerId { get; set; }
public int? WidgetId { get; set; }
.
.
.
}
我想向Widget添加一个导航属性,如下所示:
public ICollection<WidgetBlocker> Blockers { get; set; }
然后,我将设置DbContext OnModel创建,如下所示:
modelBuilder.Entity<Widget>(entity =>
{
entity.HasMany(widget => widget.Blockers).WithMany().HasForeignKey(widgetBlocker => widgetBlocker.WidgetId);
});
代码构建得很好,但我得到一个运行时错误,指出:
与外键属性int的关系?不能指向主键单元?因为它是不兼容的.为此关系配置一个主键或一组具有兼容类型的外键属性.
有没有办法在不修改表的模式的情况下遵循这些说明(配置一个主键或一组具有兼容类型的外键属性)?如果没有,有没有办法设置导航属性?也许是通过类上的一个属性,该属性允许数据库具有一种数据类型,而数据模型具有另一种数据类型?或者,除了数据类型问题,我可能做了一些不正确的事情?