EF基礎二

EF基礎二,EF5,NET4.5,ANNOTATION AND FLUENT API,MOST FOCUS ON ENTITYTYPECONFIGURATION.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.Entity;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.ModelConfiguration;

namespace BlueSea
{
    class Program
    {
        static void Main(string[] args)
        {
            Database.SetInitializer(new DropCreateDatabaseIfModelChanges<BlueSeaContext>());
            InsertDestination();
            InsertTrip();
            UpdateTrip();
            InsertPserson();
            UpdatePerson();
        }
        private static void InsertDestination()
        {
            var destination = new Destination
            {
                Country = "Indonesia",
                Description = "Tourism in Bali",
                Name = "Bali"
            };
            using (var context = new BlueSeaContext())
            {
                context.Destinations.Add(destination);
                context.SaveChanges();
            }
        }
        private static void InsertTrip()
        {
            var trip = new Trip
            {
                CostUSD = 800,
                StatrtDate = new DateTime(2013, 3, 15),
                EndDate = new DateTime(2013, 3, 20)
            };
            using (var context = new BlueSeaContext())
            {
                context.Trips.Add(trip);
                context.SaveChanges();
            }
        }
        private static void UpdateTrip()
        {
            using (var cntext = new BlueSeaContext())
            {
                var trip = cntext.Trips.FirstOrDefault();
                trip.CostUSD = 750;
                cntext.SaveChanges();
            }
        }  
        private static void InsertPserson()
        {
            var person = new Person
            {
                FirstName = "Martin",
                LastName = "Jack",
                SocialSecurityNumber = 12345678
            };
            using (var context = new BlueSeaContext())
            {
                context.People.Add(person);
                context.SaveChanges();
            }
        }
        private static void UpdatePerson()
        {
            using (var context = new BlueSeaContext())
            {
                var person = context.People.FirstOrDefault();
                person.FirstName = "Peter";
                context.SaveChanges();
            }
        }
    }
    public class Destination
    {
        public int DestinatonID { get; set; }
        public string Name { get; set; }
        public string Country { get; set; }
        public string Description { get; set; }
        public byte[] Photo { get; set; }

        public virtual ICollection<Lodging> Lodgings { get; set; }
    }
    public class DestinationConfiguration : EntityTypeConfiguration<Destination>
    {
        public DestinationConfiguration()
        {
            HasKey(d => d.DestinatonID);
            Property(d => d.Name).IsRequired();
            Property(d => d.Description).HasMaxLength(500);
            Property(d => d.Photo).HasColumnType("image");
        }
    }
    public class Lodging
    {
        public int LodgingID { get; set; }
        public string Name { get; set; }
        public string Owener { get; set; }
        public bool IsResort { get; set; }
        public decimal MileFromAirport { get; set; }

        public virtual Destination Destination { get; set; }
    }
    public class LodgingConfiguration : EntityTypeConfiguration<Lodging>
    {
        public LodgingConfiguration()
        {
            Property(l => l.Name).IsRequired().HasMaxLength(200);
            Property(l => l.MileFromAirport).HasPrecision(8, 1);
            Property(l => l.Owener).IsUnicode(false);
        }
    }
    public class Trip
    {
        public Guid Identifier { get; set; }
        public DateTime StatrtDate { get; set; }
        public DateTime EndDate { get; set; }
        public decimal CostUSD { get; set; }
        public byte[] RowVVersion { get; set; }
    }
    public class TripConfiguration : EntityTypeConfiguration<Trip>
    {
        public TripConfiguration()
        {
            HasKey(t => t.Identifier);
            Property(t => t.RowVVersion).IsRowVersion();
            Property(t => t.Identifier).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
        }
    }
    public class Person
    {
        public Person()
        {
            Address = new Address();
            Info = new PersonnalInfo
            {
                Weight = new Measurement(),
                Height = new Measurement()
            };
        }
        public int PersonId { get; set; }
        public int SocialSecurityNumber { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public byte[] RowVersion { get; set; }
        public Address Address { get; set; }
        public PersonnalInfo Info { get; set; }
    }
    public class PersonConfiguration : EntityTypeConfiguration<Person>
    {
        public PersonConfiguration()
        {
            HasKey(p =>p.PersonId);
            Property(p => p.SocialSecurityNumber).IsConcurrencyToken();
            Property(p => p.RowVersion).IsRowVersion();
            Property(p =>p.SocialSecurityNumber).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
        }
    }
    public class Address
    {
        public int AddressID { get; set; }
        public string StreetAddress { get; set; }
        public string City { get; set; }
        public string State { get; set; }
        public string ZipCode { get; set; }
    }
    public class AddressConfiguration : ComplexTypeConfiguration<Address>
    {
        public AddressConfiguration()
        {
            Property(a => a.StreetAddress).HasMaxLength(150);
        }
    }
    public class PersonnalInfo
    {
        public Measurement Weight{get;set;}
        public Measurement Height{get;set;}
        public string DierRestrict { get; set;}
    }
    public class Measurement
    {
        public decimal Reading { get; set; }
        public string Units { get; set; }
    }
    public class BlueSeaContext : DbContext
    {
        public DbSet<Destination> Destinations { get; set; }
        public DbSet<Lodging> Lodgings { get; set; }
        public DbSet<Trip> Trips { get; set; }
        public DbSet<Person> People { get; set; }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Configurations.Add(new DestinationConfiguration());
            modelBuilder.Configurations.Add(new LodgingConfiguration());
            modelBuilder.Configurations.Add(new TripConfiguration());
            modelBuilder.Configurations.Add(new PersonConfiguration());
            modelBuilder.Configurations.Add(new AddressConfiguration());
            modelBuilder.ComplexType<PersonnalInfo>();
            base.OnModelCreating(modelBuilder);
        }
    }
}


 

 

 

發佈了154 篇原創文章 · 獲贊 11 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章