指定的架构无效。错误:未加载“EntityA_EntityBs”关系,因为“EntityB”类型不可用

时间:2014-01-15 03:16:51

标签: .net entity-framework entity-framework-6

背景

我正在开发一个使用Entity Framework从第三方应用程序查询数据库的应用程序。数据库有大量表,没有外键。我已使用Entity Framework Fluent API将相关表映射到实体。

实体

namespace App.Entities
{
    public class Ticket
    {
        public int Id { get; set; }

        public virtual SalesOrder SalesOrder { get; set; }
        public int SalesOrderId { get; set; }
    }

    public class SalesOrder
    {
        public int Id { get; set; }

        public virtual ICollection<Ticket> Tickets { get; set; }
        public virtual ICollection<Ticket> Lines { get; set; }
    }
}

映射

请注意,省略了列和表名称映射,因为我认为它们不相关。

namespace App.Mappings
{
    public class TicketMap : EntityTypeConfiguration<Ticket>
    {
        public TicketMap() {}
    }

    public class SalesOrderMap : EntityTypeConfiguration<SalesOrder>
    {
        public SalesOrderMap()
        {
            HasMany(t => t.Tickets)
                .WithRequired(t => t.SalesOrder)
                .HasForeignKey(t => t.SalesOrderId);

            HasMany(t => t.Lines)
                .WithRequired(t => t.SalesOrder)
                .HasForeignKey(t => t.SalesOrderId);
        }
    }
}

实体及其映射已在Entity Framework中正确注册。

问题

当我尝试运行查询时,我收到以下MetadataException

  

指定的架构无效。错误:未加载“App.SalesOrder_Tickets”关系,因为“App.Ticket”类型不可用。

请注意,上述消息中显示的Ticket命名空间是错误的。实体类实际上在App.Entities.Ticket中。但是,我不知道这是否与问题有关。

我尝试过什么

  1. 检查关系是否正确配置
  2. this comment
  3. 中的建议检查模型中的重复类
  4. 检查实体是否与this answer
  5. 中建议的名称空间相同

2 个答案:

答案 0 :(得分:4)

问题出在这两行:

public virtual ICollection<Ticket> Tickets { get; set; }
public virtual ICollection<Ticket> Lines { get; set; }

第二个集合的元素类型应该与第一个集合的元素类型不同:

public virtual ICollection<TicketLine> Lines { get; set; }

更改此问题解决了问题。

答案 1 :(得分:2)

我有同样的错误消息,对我来说问题是我有两个不同的edmx模型,其实体名称相同。我想EF无法加载一些相关的实体,并给出了一个消息。

我解决了从一个模型中删除实体的问题(更改名称也可以正常工作)并重建解决方案。