Entity framework EF 4.3.1代码优先顺序包含多个匹配元素错误

Entity framework EF 4.3.1代码优先顺序包含多个匹配元素错误,entity-framework,Entity Framework,我在我的项目中遇到了这个错误。我被困了一个月了。 问题是,我正在对一个现有项目进行增强,域层非常复杂,有50多个表,所以我无法找出根本原因 有趣的是,如果所有域类所在的项目都在主解决方案中,则会发生错误。但是,当我复制项目并构建它时,将dll复制到web应用程序bin文件夹中,它可以正常工作。完全相同的代码。其他团队成员也没有遇到此错误 另外,当我在从TFS开发之前获取原始源代码时,也会发生相同的错误。我们已经能够在开始的至少两周内进行开发,没有任何错误。那么,是否可能是SQL数据库导致了错误

我在我的项目中遇到了这个错误。我被困了一个月了。 问题是,我正在对一个现有项目进行增强,域层非常复杂,有50多个表,所以我无法找出根本原因

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

另外,当我在从TFS开发之前获取原始源代码时,也会发生相同的错误。我们已经能够在开始的至少两周内进行开发,没有任何错误。那么,是否可能是SQL数据库导致了错误

所以我想知道这是否是EF错误。有什么指针可以帮助我调试或找出罪魁祸首域类吗

这是错误截图

--更新-- web应用启动时,context.Database.Initialize上出现错误

已设法找到导致问题的实体。 A.它是TPT+TPH B两个表具有相同的外键属性名称,在下面的示例中,它是WorkerBenefit属性

这里有报道:。 它声明发布版本: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; }
}

也许我不完全理解您的代码,但是:

[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; }
}
这可能会有所帮助——假设问题与外键有关,如我所想:


如果不是,这可能是模型与数据库之间的问题。有一个类似的问题,如果您注释掉主数据库实体中指向这些表的数据库集,然后逐个取消注释,您将找到它抱怨的数据库集。

什么查询产生了错误?你能给我们看一下涉及的POCO类吗?这不是一个查询,它是在context.Initialize方法中。你能确认EF6解决了这个问题吗?既然你知道原因,你应该能够在small测试上下文中重现它。事实上,我将无法使用EF6,因为它是一个现有的网络应用程序在生产中。正如我在文章中提到的,复制项目并单独构建dll,然后将其复制到web app bin文件夹解决了这个问题。但这不是一个长期的解决方案。我已经测试过,它与EF6一起工作,EF5仍然存在同样的问题。