c# - 实体框架关系映射中的错误
问题描述
我得到了以下 EF6 映射
namespace Model
{
[Serializable]
[Table("PROVISION")]
public class Provision
{
[Key, Column("ID_PROVISION", Order = 1), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public virtual long Id { get; set; }
[Column("ID_PROVISION_TYPE")]
public virtual int IdProvisionType { get; set; }
[ForeignKey("IdProvisionType")]
public virtual ProvisionType ProvisionType { get; set; }
}
public class ProvisionType
{
[Key, Column("ID_PROVISION_TYPE", Order = 1), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
}
}
但是,我收到以下错误:
Provision_ProvisionType_Target_Provision_ProvisionType_Source:引用约束的从属角色中所有属性的类型必须与主体角色中对应的属性类型相同。实体“Provision”上的属性“Id”类型与引用约束“Provision_ProvisionType”中实体“ProvisionType”上的属性“Id”类型不匹配。
如您所见,外键和引用的主键是同一类型。问题是它在 EF4 上运行良好,但是当我更新到 EF6 后,我开始收到此错误,并且系统很大并且充满了相同的场景。
编辑:忘了说它是一个 .net 4.0 项目
有谁知道解决方案?
解决方案
ID_PROVISION
是主键,所以ForeignKey
使用id from ID_PROVISION
against id ID_PROVISION_TYPE
key(key against key),所以必须定义相同的类型。
尝试这个:
namespace Model
{
[Serializable]
[Table("PROVISION")]
public class Provision
{
[Key, Column("ID_PROVISION", Order = 1), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public virtual long Id { get; set; }
[Key,Column("ID_PROVISION_TYPE")]
public virtual int IdProvisionType { get; set; }
[ForeignKey("IdProvisionType")]
public virtual ProvisionType ProvisionType { get; set; }
}
public class ProvisionType
{
[Key, Column("ID_PROVISION_TYPE", Order = 1), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
}
}
推荐阅读
- r - 如何获得闪亮的反应数据表输出,然后将函数应用于过滤后的数据?
- python - 从文本中删除所有表情符号
- json - 协议缓冲区生成类型的属性
- python - 优化python代码以读取文件
- java - apiKeyRequired 在 Google Cloud Endpoints 项目中不起作用
- jenkins - 计算字符串作为 Jenkins 的 Groovy "STAGE" 的参数
- python - 在 python 3.6 中安装 GDAL
- flutter - Flutter - 当 textformfield 获得焦点时,它会重置我的表单状态并导致表单重建
- android - google fit 中的卡路里值错误
- sql - SQL Server 2008 - 检索最近的非空数据