Entity Framework 4.1: Code Only mit Attributen anpassen

Das nachfolgende Beispiel demonstriert die Verwendung aller Attribute, die man zum Mappen von Klassen auf Tabellen mit Entity Framework 4.1 Code Only verwenden kann. Eine mächtigere jedoch auch komplexere Alternative dazu stellt die Fluent-API, die zu diesem Zweck auch mit EF 4.1 bereitgestellt wird, dar. Aber das ist eine andere Geschichte und somit Bestandteil eines künftigen Postings.

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

        }
    }

Standardmäßig versucht dieses Beispiel, eine Datenbank ShopDb in der SQL-Server Instanz .\SQLEXPRESS anzulegen. Ist dies nicht gewünscht, kann die zu verwendende Datenbank durch Festlegen einer Datenbankverbindungszeichenfolge mit dem Namen ShopDb in der app.config angegeben werden.

 

Schulung und Beratung

Modern Web mit Angular 2

Datenbindung, Formulare, Validierung, Routing, HTTP, Komponenten, ...

Details

Migration auf Angular 2

Bestehende Projekte auf Angular 2 migrieren, ngUpgrade, ...

Details

Progressive Web-Apps mit Angular 2

InHouse-Schulung und/oder Beratung maßgeschneidert für Ihre Lernziele

Details

Architektur-Workshop

Interaktiver Prototyp-Workshop für Ihre Anwendung

Details

Entity Framework (EF)

Datenzugriff mit Entity Framework, Mapping-Szenarien, CRUD, Transaktionen, Migrations, Stored Procedures, Vererbung, Neuerungen in Version 7

Details

Angular 2: Deep Dive

Erweiterte Aspekte von Angular 2

Details

ASP.NET WebAPI

Web APIs mit ASP.NET, HTTP, REST, Security, Formatter, Tracing, OData, Streaming

Details

Web APIs mit ASP.NET MVC 6

Web APIs mit ASP.NET, HTTP, REST, Security, Formatter, Tracing, OData, Streaming

Details

Moderne Security-Szenarien für Web APIs

OAuth 2, OpenId Connect, JWT, Spielarten und Flows, ...

Details

Weitere Schulungen ...