[Table("KategorienTable")]
public class ProduktKategorie
{
[Key]
[Column("Kategorie_Nummer", Order = 1)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int KategorieNr { get; set; }
[Required, MaxLength(50)]
public string KategorieBezeichnung { get; set; }
public virtual ICollection<Produkt> Produkte { get; set; }
public virtual ICollection<Produkt> Aktionen { get; set; }
[ConcurrencyCheck]
[Column("Version", Order = 2, TypeName="int")]
public int Version { get; set; }
}
[ComplexType]
public class ProduktDetails
{
public string Beschreibung { get; set; }
public string BildPfad { get; set; }
public string HerstellerLink { get; set; }
}
public class Produkt
{
public int ProduktId { get; set; }
public ProduktDetails Details { get; set; }
public string Bezeichnung { get; set; }
public double Preis { get; set; }
[TimestampAttribute]
public byte[] Zeitstempel { get; set; }
[NotMapped]
public double BruttoPreis { get { return Preis * 1.19; } }
// Fremdschlüsselmapping
public virtual int KategorieNr { get; set; }
[ForeignKey("KategorieNr")]
[InverseProperty("Produkte")]
public virtual ProduktKategorie Kategorie { get; set; }
[InverseProperty("Aktionen")]
public virtual ProduktKategorie AktionInKategorie { get; set; }
}
public class ShopContext : DbContext
{
public ShopContext() : base("ShopDb") { }
public DbSet<Produkt> Produkte { get; set; }
public DbSet<ProduktKategorie> Kategorien { get; set; }
}
class Program
{
static void Main(string[] args)
{
Database.SetInitializer<ShopContext>(new DropCreateDatabaseAlways<ShopContext>());
using (var ctx = new ShopContext())
{
ProduktKategorie kat = new ProduktKategorie();
kat.KategorieBezeichnung = "Bücher";
kat.KategorieNr = 7;
Produkt p1 = new Produkt();
p1.Bezeichnung = ".NET 4 UPDATE";
p1.Details = new ProduktDetails();
p1.Details.Beschreibung = "Von .NET 3 auf .NET 4 ...";
p1.Details.BildPfad = null;
p1.Details.HerstellerLink = "http://tinyurl.com/net4update";
p1.Kategorie = kat;
kat.Produkte = new List<Produkt> { p1 };
ctx.Kategorien.Add(kat);
ctx.SaveChanges();
}
}
}