2010-12-13 6 views
0

J'utilise d'abord le code CTP5 du code. Prenez la classe simple suivante et DbContextEntity Framework - Code Tout d'abord, ne pas générer de collections associées dans la base de données

public class Test 
{ 
    public Test() 
    { 
     Keywords = new Collection<string>(); 
    } 

    public int Id { get; set; } 
    public string Name { get; set; } 
    public ICollection<string> Keywords { get; set; } 
} 

public class TestDbContext : DbContext 
{ 
    public TestDbContext() 
    { 
     Database.Delete(); 
     Database.CreateIfNotExists(); 
    } 

    public DbSet<Test> Tests { get; set; } 

    protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder) 
    {  
     base.OnModelCreating(modelBuilder); 
    } 
} 

associée Le type « System.Collections.Generic.ICollection » doit être un type de valeur non annulable afin de l'utiliser comme paramètre « T » dans le type générique ou méthode « System.Data.Entity.ModelConfiguration.Configuration.Types.StructuralTypeConfiguration .Property (System.Linq.Expressions.Expression>) »

Toute idée comment créer les relations de table nécessaires entre la classe de test et la propriété des mots-clés?

Répondre

3

Ajouter une classe Keyword et changer ICollection<string> Keywords {get; set;} à ICollection<Keyword> Keywords {get; set;}

public class Keyword 
{ 
    public string Data {get;set;} 
} 

et le modèle de code créant comme ceci:

protected override void OnModelCreating(ModelBuilder builder) 
{ 
    builder.Entity<Keyword>() 
     .HasKey(x => x.Data); 
    base.OnModelCreating(builder); 
} 

Imaginez que vous avez 2 collections 1 - Mots-clés, 2 - Tag. Votre réalisation la mappera à la même table, car le type de mappage ORM définit l'entité. Et les deux Keyword et Tag sont de type string. Donc, pour diviser ces entités, vous devez diviser les types.

+0

Merci, mais pourquoi créer une classe pour cela? Il n'y a aucun moyen d'inférer la relation de ICollection ? – Fixer

+0

Je ne suis pas sûr, mais je pense, que vous devriez ajouter des classes pour toutes les données que vous stockez, car vous mappez les objets POCO à la base de données, pas aux types de base. –

+0

Merci cela fonctionne, mais comment puis-je supprimer le test.Id de la table de mots-clés et faire la relation de classe de test sur la base d'un FK sur Keywords.Id? – Fixer

Questions connexes