18.02.2011 22:13:00
Mit Entity Framework CTP 5 steht ein Ausblick auf ein Feature zur Verfügung, welche recht wahrscheinlich in der nächsten Version des Entity Frameworks einzug halten wird: Code Only. Es erlaubt das Mappen von Entitäten auf Tabellen anhand bestimmter Konventionen. Für Fälle, in denen diese Konventionen nicht passen, können Sie über ein Fluent-Interface oder über Attribute abgeändert werden. Diese Vorgehensweise, die sehr an jener von (N)Hibernate erinnert, hat den Vorteil, dass das Entity Data Model wegfällt und sich die Entitäten somit leichter auf verschiedene Assemblies aufteilen lassen. Ferner kann mit dem Entwickeln des OO-Modells in Form von Klassen begonnen werden.
Das nachfolgende Listing liefert einen ersten Vorgeschmack darauf.
public class HotelContext : DbContext
{
public HotelContext(): base("HotelDb-CodeFirst") { }
public DbSet<Hotel> Hotels { get; set; }
public DbSet<Region> Regionen { get; set; }
}
[Table("RegionenTab")]
public class Region
{
[Key]
[Column(Name="Region_Code", Order=1)]
[DatabaseGenerated(DatabaseGenerationOption.None)]
public virtual int RegionCode { get; set; }
[MaxLength(27)]
[Required]
[Column(Name = "Bez", Order = 3)]
public virtual string Bezeichnung { get; set; }
public virtual ICollection<Hotel> Hotels { get; set; }
public virtual ICollection<Hotel> TopRanked { get; set; }
[ConcurrencyCheck]
[Column(Name = "Version", Order = 2, TypeName="bigint")]
public virtual int Version { get; set; }
}
[ComplexType]
public class Adresse
{
public virtual string Strasse { get; set; }
public virtual string Plz { get; set; }
public virtual string Ort { get; set; }
}
public class Hotel
{
public virtual int HotelId { get; set; }
public virtual Adresse Adresse { get; set; }
public virtual string Bezeichnung { get; set; }
public virtual int Sterne { get; set; }
[InverseProperty("TopRanked")]
public virtual Region TopRankedInRegion { get; set; }
public virtual int RegionCode { get; set; }
[TimestampAttribute]
public virtual byte[] LetzteModifikation { get; set; }
public virtual double Preis { get; set; }
[NotMapped]
public virtual double TouristenPreis { get { return Preis * 2; } }
public virtual Kategorie Kategorie { get; set; }
[ForeignKey("RegionCode")]
[InverseProperty("Hotels")]
public virtual Region Region { get; set; }
public virtual ICollection<Merkmal> Merkmale { get; set; }
}
Weitere Infos dazu finden sich in meinem aktuellen Artikel im .NET Magazin.
|