2010-12-12 9 views
2

In CTP 4 wir die Eigenschaften wählen könnten wir wie so abbilden wollen:Wie abzubilden Eigenschaften in EF CTP5

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

Wie erreichen wir dies in CTP5?

ich die folgende Map-Konfiguration versucht, mit dieser aber nicht erscheint, da ich ignorieren explizit müssen noch arbeiten (this.Ignore (..)), um die Eigenschaften Ich möchte nicht zur Karte:

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"); 
}); 

Wenn man bedenkt, dass die neue API flüssiger sein soll, ist es seltsam, dass ich mehr Code schreiben muss, um dasselbe zu erreichen.

Dank Ben

+0

+1, um dies zu erfassen! –

Antwort

1

CTP5 ist in der Tat leistungsfähiger und flexibler sowohl in Daten Annotations und fließend API. Zum Beispiel in CTP4, wenn wir eine Eigenschaft aus dem Mapping ausschließen wollten, müssten wir explizit alles andere mit MapSingleType abbilden, um den einen zu überspringen, den wir nicht wollen, so wie du es erwähnt hast.

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

Und Sie sind, keine Notwendigkeit Methode aufzurufen Map getan:
In CTP5 kann dies einfach durch die Verwendung [NotMapped] Attribut auf dem Grundstück oder durch diese fließend API-Code erfolgen.

+0

Ja, ich weiß, dass ich solche Eigenschaften ignorieren kann. Kann ich nicht mehr eine Gruppe von Eigenschaften zuordnen wie früher? In einigen Fällen ist dies vorzuziehen, anstatt sich auf Konventionen zu verlassen. –

+0

Ah, jetzt sehe ich was du meinst. Ja, Sie haben Recht, es scheint, als müssten Sie die Immobilie explizit ignorieren oder es wird sich beschweren. Mit '[NotMapped]' Attribut, das ist nicht so schlimm IMHO. –

6

Dieser Blogeintrag enthält ctp 5-Mapping-Beispiele.

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

Stellen ein clr-Nullable-Eigenschaft erforderlich:

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

ändern Stringlänge:

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

ausschalten Identität:

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

Ignor e eine Eigenschaft:

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

Tabelle & Spaltenzuordnung ändern Spaltenname:

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

ändern Tabellenname:

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

ändern Tabellenname mit Schema:

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

Ja Ich habe diesen Artikel gesehen, aber es erklärt nicht, wie man eine Gruppe von Eigenschaften abbildet.In diesem Fall möchte ich mich nicht auf Konventionen verlassen, um meine Klasse abzubilden. –

+0

Nicht sicher, was Sie mit einer Gruppe von Eigenschaften meinen? Wenn Sie Eigenschaften zuordnen müssen, ist die neue API modelBuilder.Entity () .Property (c => c.Name) .HasColumnName ("cat_name"); –