EF 4.3.1 Code First Sequence包含多个匹配元素错误

时间:2013-11-02 15:19:56

标签: entity-framework

我的项目中出现了这个错误。被困了一个月了。 问题是,我正在努力增强现有项目,并且域层非常复杂,有超过50个表,所以我无法确定根本原因。

有趣的是,如果所有域类所在的项目都在主解决方案中,则会发生错误。但是,当我将项目复制并构建它时,将dll复制到Web应用程序bin文件夹,它可以正常工作。完全相同的代码。其他团队成员也不会遇到此错误。

此外,当我从TFS开发之前获得原始源代码时,会发生同样的错误。我们至少在开始的两周内就能够毫无错误地进行开发。那么SQL DB可能导致错误吗?

所以我想知道这是不是EF的错误。是否有任何指针可以帮助我调试或找出罪魁祸首的域类?

这是错误截图。

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

- UPDATE-- 启动Web应用程序时,错误发生在context.Database.Initialize上。

管理以查找导致问题的实体。 一个。这是TPT + TPH 湾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; }
}

1 个答案:

答案 0 :(得分: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,然后逐个取消注释,您将找到它所抱怨的那个。