实体框架关系映射中的错误

时间:2018-06-02 19:54:19

标签: c# .net entity-framework-6

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

有人知道解决方案吗?

1 个答案:

答案 0 :(得分:0)

ID_PROVISION是主键,因此ForeignKey使用来自ID_PROVISION的id对{id ID_PROVISION_TYPE键(键对键),因此您必须定义相同的类型。< / p>

试试这个:

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; }
    }
}