[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();
                
            }
        }
    }