2013-11-02 67 views
1

我在項目中遇到了這個錯誤。現在卡住了一個月。 問題是,我正在對現有項目進行增強,並且域圖層超過50個表格非常複雜,所以我無法找到根本原因。EF 4.3.1代碼優先序列包含多個匹配元素錯誤

有趣的是,如果所有域類所在的項目位於主解決方案中,則會發生錯誤。但是,當我複製項目並構建它時,將該dll複製到Web應用程序bin文件夾,它的工作原理沒有錯誤。完全相同的代碼。其他團隊成員也不會遇到此錯誤。

此外,當我在從TFS開發之前獲取原始源代碼時,會發生相同的錯誤。至少在一開始的2周內,我們就能夠做到沒有任何錯誤。那麼是否有可能導致錯誤的SQL DB?

所以我想知道如果這是一個EF錯誤。任何指針幫助我調試或找出罪魁禍首域類?

下面是錯誤截圖。

http://imageshack.us/photo/my-images/10/8a1w.jpg/

--UPDATE-- 的錯誤是在context.Database.Initialize web應用程序啓動時。

管理找到導致問題的實體。 a。它是TPT + TPH b。 2個表具有相同的外鍵屬性名稱,在我的示例中,它是WorkerBenefit屬性。

這裏有報道:http://entityframework.codeplex.com/workitem/677。 它聲明發布:6.0.0,意味着我必須使用EF6?

[Table("Person")] 
public abstract class Person 
{ 
    public int Id { get; set; } 
    public string PersonNumber { get; set; } 
} 

[Table("FullTimeWorker")] 
public class FullTimeWorker : Person 
{ 
    public string FullTimeWorkerProperty { get; set; } 

    [ForeignKey("WorkerBenefit")] 
    public int WorkerBenefitId { get; set; } 

    [ForeignKey("WorkerBenefitId")] 
    public virtual WorkerBenefit WorkerBenefit { get; set; } 
} 

[Table("PartTimeWorker")] 
public class PartTimeWorker : Person 
{ 
    public string PartTimeWorkerProperty { get; set; } 

    [ForeignKey("WorkerBenefit")] 
    public int WorkerBenefitId { get; set; } 

    [ForeignKey("WorkerBenefitId")] 
    public virtual WorkerBenefit WorkerBenefit { get; set; } 
} 

public class MorningShiftWorker : PartTimeWorker 
{ 
    public string MorningShiftWorkerProperty { get; set; } 
} 

public class EveningShiftWorker : PartTimeWorker 
{ 
    public string EveningShiftWorkerProperty { get; set; } 
} 
+0

什麼查詢會產生錯誤?你能向我們展示涉及的POCO類嗎? – Dabblernl

+0

這不是一個查詢,它是在上下文初始化方法。 – vincent007

+1

你能否確認探頭與EF6相去甚遠?現在你知道了原因,你應該可以在一個簡單的測試環境中重現它。 – Dabblernl

回答

0

也許我可能沒有完全理解你的代碼,但不是:

[Table("FullTimeWorker")] 
public class FullTimeWorker : Person 
{ 
    public string FullTimeWorkerProperty { get; set; } 

    [ForeignKey("WorkerBenefit")] 
    public int WorkerBenefitId { get; set; } 

    [ForeignKey("WorkerBenefitId")] 
    public virtual WorkerBenefit WorkerBenefit { get; set; } 
} 

[Table("PartTimeWorker")] 
public class PartTimeWorker : Person 
{ 
    public string PartTimeWorkerProperty { get; set; } 

    [ForeignKey("WorkerBenefit")] 
    public int WorkerBenefitId { get; set; } 

    [ForeignKey("WorkerBenefitId")] 
    public virtual WorkerBenefit WorkerBenefit { get; set; } 
} 

它不應該是:

[Table("FullTimeWorker")] 
public class FullTimeWorker : Person 
{ 
    public string FullTimeWorkerProperty { get; set; } 

    [ForeignKey("WorkerBenefit")] 
    public int WorkerBenefitId { get; set; } 

    public virtual WorkerBenefit WorkerBenefit { get; set; } 
} 

[Table("PartTimeWorker")] 
public class PartTimeWorker : Person 
{ 
    public string PartTimeWorkerProperty { get; set; } 

    [ForeignKey("WorkerBenefit")] 
    public int WorkerBenefitId { get; set; } 

    public virtual WorkerBenefit WorkerBenefit { get; set; } 
} 

[Table("WorkerBenefit")] 
public class WorkerBenefit : Person 
{ 
    public int WorkerBenefitId { get; set; } 

    public string benefit { get; set; } 
} 

這可能會幫助 - 假設的問題是相關的到我認爲的外鍵:How Should I Declare Foreign Key Relationships Using Code First Entity Framework (4.1) in MVC3?

如果沒有,這可能是一個與模型有關的問題與數據庫相比。有一個類似的問題,如果你註釋掉主數據庫實體中指向這些表的DbSets,然後逐個取消註釋,你會發現它正在抱怨。