2015-05-14 75 views
0

我正在通过Visual FoxPro数据库使用实体框架(我还没有听说过)。我遇到了使用数据注释为模型创建关系的问题。实体框架不同的外键数据类型

我已经简化类:

public class Country 
{ 
    [Key] 
    public int Sid { get; set; } 

    [ForeignKey("ObjectId")] 
    public virtual ICollection<Heading> Headings { get; set; } 

    ... 
} 

public class Heading 
{ 
    [Key] 
    public int Id { get; set; } 

    public string ObjectId { get; set; } 
} 

关系:一个国家有很多标题。 (一对多)

请注意Country有一个Id,它是一个int。而Heading上的ObjectId(外键)是string

我收到以下异常:

Country_Headings_Source_Country_Headings_Target:模型生成过程中检测到

一个或多个验证错误:在一个引用约束的从属角色类型都 属性必须是 与主体角色中相应的属性类型相同。 实体“标题”上的属性'Headingid'的类型不匹配 实体'国家'中属性'Sid'的类型,参考 约束'Country_Headings'。

问题是数据类型不同。有什么办法可以让我有这种关系吗?

谢谢。

+0

什么是标题的主要关键? 它看起来好像你有一个外键不是一个键字段 –

+0

@AntonyKoch标题的主键是'Id'。关系是国家的'Sid'到标题的'ObjectId'。我希望这是有道理的。 –

回答

1

编辑 这用于使用枚举,可能与此?

public class Country 
{ 
    [Key] 
    public int Sid { get; set; } 

    [ForeignKey("ObjectIdInt")] 
    public virtual ICollection<Heading> Headings { get; set; } 

    ... 
} 

public class Heading 
{ 
    [Key] 
    public int Id { get; set; } 

    public string ObjectId { get; set; } 

    public int ObjectIdInt 
    { 
     get { return int.Parse(ObjectId); } 
     set { ObjectId = value.ToString() } 
    } 
} 
+0

唉,这没有奏效。发生了同样的错误。从本质上讲,这种关系是国家的'Sid'到标题的'ObjectId'。 (正如我在上面的评论中提到的)问题是,其中一个是'int',另一个是'string'。另外,我认为解决方案在保存/更新标题时会导致一些问题,因为“Id”列是此表的主键,而不是“ObjectId”。 –

+0

对,所以ObjectId是一个int存储为一个字符串? –

+0

对于国家是的。但是,标题表具有其他表的外键,其主键是字符串(是,它是_those_表之一)。 –