2015-05-14 65 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_表之一)。 –