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

jho*_*ira 5 .net c# 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; }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

Provision_ProvisionType_Target_Provision_ProvisionType_Source:引用约束的从属角色中的所有属性的类型必须与主体角色中的相应属性类型相同.实体"Provision"上的属性"Id"类型与引用约束"Provision_ProvisionType"中实体"ProvisionType"上的属性"Id"类型不匹配.

如您所见,外键和引用的主键是相同的类型.问题是它在EF4上运行良好,但是一旦我更新到EF6,我就开始收到这个错误,系统很庞大并且充满了同样的情况.

编辑:忘了提到它是一个.net 4.0项目

有谁知道解决方案?

use*_*506 0

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; }
    }
}
Run Code Online (Sandbox Code Playgroud)