首页 > 解决方案 > 实体框架关系映射中的错误

问题描述

我得到了以下 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 项目

有谁知道解决方案?

标签: c#.netentity-framework-6

解决方案


ID_PROVISION是主键,所以ForeignKey使用id from ID_PROVISIONagainst id ID_PROVISION_TYPEkey(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; }
    }
}

推荐阅读