.net 指定的架构无效。错误:关系';实体a#u实体b';未加载,因为类型为';实体b';不可用 背景
我正在开发一个应用程序,它使用实体框架从第三方应用程序查询数据库。数据库有大量的表,没有外键。我已经使用实体框架fluentapi将相关表映射到实体 实体.net 指定的架构无效。错误:关系';实体a#u实体b';未加载,因为类型为';实体b';不可用 背景,.net,entity-framework,entity-framework-6,.net,Entity Framework,Entity Framework 6,我正在开发一个应用程序,它使用实体框架从第三方应用程序查询数据库。数据库有大量的表,没有外键。我已经使用实体框架fluentapi将相关表映射到实体 实体 名称空间应用程序实体 { 公务舱票 { 公共int Id{get;set;} 公共虚拟销售订单销售订单{get;set;} public int SalesOrderId{get;set;} } 公共类销售订单 { 公共int Id{get;set;} 公共虚拟ICollection票证{get;set;} 公共虚拟ICollection行{
名称空间应用程序实体
{
公务舱票
{
公共int Id{get;set;}
公共虚拟销售订单销售订单{get;set;}
public int SalesOrderId{get;set;}
}
公共类销售订单
{
公共int Id{get;set;}
公共虚拟ICollection票证{get;set;}
公共虚拟ICollection行{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);
}
}
}
namespace应用程序映射
{
公共类TicketMap:EntityTypeConfiguration
{
公共TicketMap(){}
}
公共类SalesOrderMap:EntityTypeConfiguration
{
public SalesOrderMap()
{
有很多票(t=>t张票)
.WithRequired(t=>t.SalesOrder)
.HasForeignKey(t=>t.SalesOrderId);
有许多(t=>t行)
.WithRequired(t=>t.SalesOrder)
.HasForeignKey(t=>t.SalesOrderId);
}
}
}
实体及其映射已在实体框架中正确注册
问题
当我尝试运行查询时,我收到以下MetadataException
:
指定的架构无效。错误:由于类型“App.Ticket”不可用,因此未加载关系“App.SalesOrder\u Tickets”
请注意,上面消息中显示的Ticket
名称空间是错误的。实体类实际上位于App.Entities.Ticket
中。然而,我不知道这是否与问题有关
我试过的
问题在于这两条线:
public virtual ICollection<Ticket> Tickets { get; set; }
public virtual ICollection<Ticket> Lines { get; set; }
公共虚拟ICollection票证{get;set;}
公共虚拟ICollection行{get;set;}
第二个集合的元素类型应与第一个集合的元素类型不同:
public virtual ICollection<TicketLine> Lines { get; set; }
公共虚拟ICollection行{get;set;}
更改此选项修复了问题。我收到了相同的错误消息,问题是我有两个不同的edmx模型,具有相同名称的实体。我猜EF无法加载一些相关实体,并给出了一个消息
我解决了从一个模型中删除实体(我想更改名称也可以)并重建解决方案的问题 也可能与这个问题有关。我也有同样的问题,但不幸的是没有发现任何类似的错误。被困了几个小时!有类似的问题,重复/不明确的属性是我的根本原因。我在我的POCO上有一个带有PropertyA的基类实现,它与一个显式接口相结合,还编译了PropertyA,因为显式接口实现不会隐藏现有属性。有效的C#但EF6仍然失败。。。重命名一个属性修复了它。@josant所以不能有两个相同类型的集合?
public virtual ICollection<TicketLine> Lines { get; set; }