1

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

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

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

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

这是错误截图。

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

--UPDATE-- 启动 Web 应用程序时,context.Database.Initialize 上出现错误。

设法找到导致问题的实体。一个。这是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; }
}
4

1 回答 1

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; }
}

这可能会有所帮助——假设问题与我认为的外键有关: 我应该如何在 MVC3 中使用 Code First Entity Framework (4.1) 声明外键关系?

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

于 2014-08-08T02:44:40.093 回答