Schéma spécifié n'est pas valide. Erreurs: La relation "EntityA_EntityBs" n'a pas été chargé, car le type "EntityB" n'est pas disponible
Fond
Je travaille sur une application qui utilise Entity Framework pour interroger une base de données à partir d'une application tierce. La base de données a un grand nombre de tables et pas de clés étrangères. J'ai mappé les tableaux pertinents à des entités à l'aide de Entity Framework API Fluent.
Entités
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; }
}
}
Mappages
Noter que la colonne et le nom de la table de mappage est oublié car je ne pense pas qu'ils soient pertinents.
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);
}
}
}
Les entités et leurs mappages sont correctement enregistrés avec Entity Framework.
Problème
Je reçois le suivant MetadataException
lorsque j'essaie d'exécuter une requête:
Schéma spécifié n'est pas valide. Erreurs: La relation 'App.SalesOrder_Tickets " n'a pas été chargé, car le type d'Application.Billet " n'est pas disponible.
Noter que l'espace de noms de Ticket
indiqué dans le message ci-dessus est faux. La classe d'entité est en fait dans App.Entities.Ticket
. Cependant, je ne sais pas si c'est lié au problème ou pas.
Ce que j'ai Essayé
- De vérifier que la relation semble être correctement configuré
- Vérification de doublons de classes dans le modèle comme le suggère ce commentaire
- De vérifier que les entités sont dans le même espace de noms, comme suggéré dans cette réponse
OriginalL'auteur Sam | 2014-01-15
Vous devez vous connecter pour publier un commentaire.
Le problème était cette paire de lignes:
Le type de l'élément de la deuxième collection était censé être différent de celui de la première:
De changer le problème est résolu.
Eu un problème similaire, dupliquer/ambiguës propriétés a été la cause de racine de la mine. J'ai eu une classe de base de la mise en œuvre avec PropertyA combiné avec une interface explicite sur ma POCO aussi avec PropertyA il compilé car une implémentation d'interface explicite de ne pas cacher des propriétés existantes. Valide en C# mais EF6 encore échoué... Renommer une propriété fixe.
si vous ne pouvez pas avoir 2 collections du même type?
OriginalL'auteur Sam
J'ai eu le même message d'erreur et le problème pour moi est que j'avais deux edmx modèles avec des Entités du même nom. Je suppose que EF ne pouvait pas charger certains de ces entités et a été de donner un msg.
J'ai résolu la suppression d'entités à partir d'un modèle (changement de nom marcherait aussi bien, je suppose) et la reconstruction de la solution.
OriginalL'auteur Vland