1

Je suis en train de me lancer dans une base de données de commerce électronique dans EF 4.1 Code First.Entity Framework 4.1 Foreign Key question

Je suis venu à une situation où je pense que je suis justifié, mais pas sûr ..

Considérez:

class Download 
{ 
    int ID 
    string Mime 
    string Filename 
    string Extension 
} 

class DownloadBinary 
{ 
    int ID 
    int DownloadID 
    Download Download 
    byte[] Binary 
} 

class DownloadURL 
{ 
    int ID 
    int DownloadID 
    Download Download 
    string URL 
} 

Maintenant, je l'ai placé les clés étrangères pour téléchargement dans l'autre deux classes que je souhaite supprimer les nulls essentiellement. Cela a également le sous-produit d'autoriser plusieurs classes DownloadBinary et DownloadURL par classe de téléchargement, ce qui semble correct. Mais cela semble aller à l'encontre du point de vue d'EF, car la classe Download n'encapsule pas les classes DownloadBinary et DownloadURL. Je sais que je peux rechercher les classes DbContext et supprimer les classes DownloadBinary et DownloadURL pour un ID de classe de téléchargement donné, donc je peux obtenir des données ok.

Si je tenais DownloadBinary ID et downloadURL ID dans la classe de téléchargement, je pourrais être soumis à des valeurs nulles, ce qui est mon point de le faire de cette façon ..

Je suis vraiment attendre d'appliquer un à zéro ou une relation de Download to DownloadBinary ou DownloadURL classes dans mes formulaires d'entrée de données ..

Je ne vois pas beaucoup de problème ici, mais que pensent les gens plus expérimentés?

Répondre

1

Supprimer DownloadID à la fois DownloadBinary et DownloadUrl et la carte ID de ces classes comme clé étrangère à ID de Download. EF prend en charge la relation un-à-un uniquement sur les clés primaires car elle ne prend pas en charge les clés uniques.

modelBuilder.Entity<Download>() 
      .HasOptional(d => d.DownloadBinary) 
      .WithRequired(db => db.Download); 


modelBuilder.Entity<Download>() 
      .HasOptional(d => d.DownloadUrl) 
      .WithRequired(du => du.Download); 

Les deux DownloadBinary et DownloadUrl ne doivent pas utiliser autogenerated Id dans la base de données parce que leur identité est définie par Download: modelBuilder.Entity() .Property (db => db.ID) .HasDatabaseGeneratedOption (DatabaseGeneratedOption.None)

modelBuilder.Entity<DownoladUrl>() 
      .Property(du => du.ID) 
      .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 
+0

Vous êtes l'homme !! : D Merci beaucoup, cette méthode sonne juste ce dont j'ai besoin: D –

+0

wierd, ça ne me laisse pas énoncer la contrainte de clé étrangère? Des idées? –

+0

Quelle erreur avez-vous eu? –

Questions connexes