Entity Framework - l'Insertion de l'entité avec plusieurs modèles et bases de données

J'ai mon nom de domaine est divisé en plusieurs Entity Framework modèles. J'ai partagé quelques entités qui s'étendent sur plusieurs modèles (nommé de Recherche), cependant, ceux-ci sont remplacés par "à l'aide de" références en utilisant les méthodes décrites dans Travailler Avec Des Modèles De Grande Taille Dans Le Cadre De L'Entité. Toutefois, ce qui rend mon cas un peu plus unique, c'est que je suis séparer de ces modèles dans plusieurs bases de données (une par modèle).

Je vais avoir un problème de l'insertion de l'un de mes partagé entités dans ma commune DB. Il échoue avec l'erreur:

Le membre avec l'identité
"L'harmonie.Les membres de l'.FK_ResidentialAddress_ResidenceTypelookup'
n'existe pas dans les métadonnées
collection.

Que clé étrangère que c'est en se référant à ne pas existent sur la commune "DB". Mais je suis aussi pas à travailler avec l'entité de l'autre côté de la relation (nommé ResidentialAddress); je n'ai même du contexte qui permettrait de contenir de l'autre entité est initialisé (nommé MembersDb). Cependant, les deux modèles sont compilés dans la même assemblée.

Il n'y a pas les propriétés de navigation va de de Recherche à ResidentialAddress. Bien qu'il y est une propriété de navigation dans l'autre sens (ce qui je ne serai pas la persistance seule à l'aide de la mémoire).

Mon MetadataWorkspace pour la EntityConnection de la CommonDb contexte a été explicitement initialisée avec seulement le SSDL/CSDL/MSL les données nécessaires pour que la base de données. J'ai confirmé il n'y a pas de références à la clé étrangère mentionnés dans ce jeu de schéma de données.

var metaAssembly = typeof(CommonDb).Assembly;
var schemaResources = new string[]
{ 
    String.Format("res://{0}/Common.ssdl", metaAssembly.FullName), 
    String.Format("res://{0}/Common.csdl", metaAssembly.FullName), 
    String.Format("res://{0}/Common.mdl", metaAssembly.FullName), 
}
MetadataWorkspace metadata = new MetadataWorkspace(schemaResources, new []{ metaAssembly });
EntityConnection connection = new EntityConnection(metadata, myDatabaseConnection);

POSSIBLE d'INDICE: Il ne fonctionne pas quand je vais dans les classes générées et de supprimer toutes les EdmRelationshipAttribute attributs avec leur associé EdmRelationshipNavigationPropertyAttribute des modèles (MembersDb).

Questions clés:

  1. Alors, pourquoi est-ce que Entity Framework est en train de faire quelque chose de la relation qui est pour une entité qui n'est ni dans le champ d'application et ne sera affecté par l'insertion de l'enregistrement!?
  2. Je suis heureux d'avoir le code généré supprimer les attributs mentionnés ci-dessus, mais je tiens à ce que les propriétés de navigation restent. Comment puis-je modifier la CSDL pour réaliser cela?

REMARQUE: la Persistance de "l'enfant" des modèles n'est pas une priorité, ni l'intégrité de leur maintenant de la croix-DB clés étrangères. Ces bases de données sont conservées à l'aide de SQL EC, mais ils ont été générés à partir d'un seul maître base de données SQL Server.

OriginalL'auteur Reddog | 2011-04-05