2010-12-12 31 views
2

En CTP 4, nous pourrions choisir les propriétés que nous voulons carte comme ceci:Comment cartographier les propriétés dans EF CTP5

this.MapSingleType(i => new 
{ 
    i.Id, 
    i.OriginalFileName, 
    i.Extension, 
    i.MimeType, 
    i.Width, 
    i.Height, 
    i.ImageStoreLocationId, 
    i.AlternateText, 
    i.ImageData 
}); 

Comment pouvons-nous parvenir à CTP5?

J'ai essayé d'utiliser la configuration de la carte ci-dessous, mais cela ne semble pas fonctionner puisque je dois encore ignorer explicitement (this.Ignore (..)) les propriétés que je ne veux pas la carte:

Map(config => 
{ 
    config.Properties(i => new 
    { 
     i.OriginalFileName, 
     i.Extension, 
     i.MimeType, 
     i.Width, 
     i.Height, 
     i.ImageStoreLocationId, 
     i.AlternateText, 
     i.ImageData 
    }); 

    config.ToTable("Images"); 
}); 

Considérant que la nouvelle API est censée être plus fluide, il est étrange que je doive écrire plus de code pour arriver à la même chose.

Merci Ben

+0

+1 pour attraper ça! –

Répondre

1

CTP5 est en effet plus puissant et flexible à la fois dans les annotations de données et API couramment. Par exemple, dans CTP4, si nous voulions exclure une propriété de la cartographie, nous devions explicitement mapper tout le reste avec MapSingleType afin d'ignorer celui que nous ne voulons pas, comme vous l'avez mentionné.
En CTP5 cela peut être fait en utilisant simplement [NotMapped] attribut sur la propriété ou par ce code API couramment:

this.Ignore(i => i.Id); 

Et vous avez terminé, nul besoin d'invoquer la méthode Map.

+0

oui je réalise que je peux ignorer des propriétés comme celle-ci. Puis-je ne plus mapper un groupe de propriétés comme je le faisais auparavant? Dans certains cas, c'est préférable plutôt que de s'appuyer sur des conventions. –

+0

Ah, maintenant je vois ce que tu veux dire. Oui, vous avez raison, semble que vous devez ignorer explicitement la propriété ou il va se plaindre. Avec l'attribut '[NotMapped]', ce n'est pas si mauvais à mon humble avis. –

6

Cet article de blog a des exemples de mappage 5 ctp.

http://blogs.msdn.com/b/adonet/archive/2010/12/14/ef-feature-ctp5-fluent-api-samples.aspx

rendre une propriété clr-annulable requis:

modelBuilder.Entity<Product>() 
    .Property(p => p.Name) 
    .IsRequired(); 

Change longueur de la chaîne:

modelBuilder.Entity<Product>() 
    .Property(p => p.Name) 
    .HasMaxLength(50); 

Eteignez Identité:

modelBuilder.Entity<Product>() 
    .Property(p => p.ProductId) 
    .HasDatabaseGenerationOption(DatabaseGenerationOption.None); 

Ignor e une propriété:

modelBuilder.Entity<Person>() 
    .Ignore(p => p.Name); 

Tableau & Colonne Mapping Changer le nom de la colonne:

modelBuilder.Entity<Category>() 
    .Property(c => c.Name) 
    .HasColumnName("cat_name"); 

Changer le nom de la table:

modelBuilder.Entity<Category>() 
    .ToTable("MyCategories"); 

Changer le nom de la table avec le schéma:

modelBuilder.Entity<Category>() 
    .ToTable("MyCategories", "sales"); 
+0

Oui, j'ai vu cet article mais il n'explique pas comment mapper un groupe de propriétés.Dans ce cas, je ne veux pas me fier aux conventions pour mapper ma classe. –

+0

Vous ne savez pas exactement ce que vous entendez par groupe de propriétés? Si vous devez mapper des propriétés, la nouvelle API est modelBuilder.Entity () .Property (c => c.Name) .HasColumnName ("cat_name"); –