2012-10-15 5 views
0

J'essaie de porter une application existante (en utilisant ADO.Net pur) vers une nouvelle application utilisant EF 4.3 Code First. Il est à noter que c'est la première fois que j'utilise EF.Entity Framework Code Première situation de mappage

Fondamentalement, j'ai une table de fournisseurs, mais avec deux tables de spécialisation avec des attributs spécifiques à chacun des deux types de fournisseurs.

Voici ce que la base de données existante ressemble:

create table Supplier(
id_supplier int not null identity 
--Bunch of other attributes 
); 

create table Individual(
id_individual int not null --not identity, gets the same value as the Supplier table 
--Attributes specific to individuals 
); 

alter table Individual add constraint fk_individual_supplier 
foreign key(id_individual) references Supplier(id_supplier); 

create table Corporation(
id_corporation int not null --not identity, gets the same value as the Supplier table 
--Attributes specific to corporations 
); 

alter table Corporation add constraint fk_corporation_supplier 
foreign key(id_corporation) references Supplier(id_supplier); 

Donc, comme les tableaux, un fournisseur peut être une personne ou une société.

L'application existante est comme ceci:

  • classe abstraite fournisseur avec ses attributs
  • classe Dérivées individuelle du fournisseur avec ses attributs supplémentaires
  • classe Corporation provenant de fournisseur avec ses attributs supplémentaires

Le code Ado.Net fonctionne actuellement en recevant des objets Fournisseur, générant des enregistrements sur la table individuelle si l'objet transmis est de type individuel ou table de corporation si l'objet passé est de type Corporation. Par conséquent, chaque enregistrement sur le fournisseur sera associé à un individu ou à une société. De même, les tables Individual et Corporation n'ont pas de clés étrangères dans les autres tables de la base de données. Au lieu de cela, les relations sont toutes avec la table Supplier. La table qui génère l'ID est Fournisseur.

Comment puis-je mapper ceci avec Code First? Au début, j'ai pensé à garder ma structure, je veux dire, la classe abstraite du fournisseur et l'individu et la société qui en découlent. Étant donné que j'ai besoin d'Entity pour insérer d'abord sur la table Supplier (générer le champ d'identité), il semble que les classes de modèle Individual et Corporation seraient mappées à la table Supplier.

Mais comment serait-il possible de recevoir la classe abstraite et d'insérer sur l'une des tables de spécialisation en fonction du type? Je ne pense pas que ce soit possible sans SQL personnalisé, ce qui me fait penser que mon approche est fausse.

Merci d'avance pour votre aide.

Répondre

0

Cela ressemble à l'héritage "table par type" (TPT). Avec TPT, il existe une table de base avec des colonnes communes pour tous les types dérivés et des tables par types dérivés avec des colonnes spécifiques au type. Le framework Entity supporte ce modèle. Voir this excellent blog pour des exemples de comment le faire à la fois avec des annotations de données et la cartographie fluide.

+0

Ceci est 100% ma situation. Merci beaucoup! –

Questions connexes