EntityFramework简介
1.数据库链接配置
官方文档: https://msdn.microsoft.com/en-us/data/jj556606
1.1通过配置文件配置(App.config或Web.config), 这种配置方式也有两种形式, 一个是配置connectionStrings节, 另一个是配置entityFramework节
1.2通过SqlConnectionFactory配置
1.3通过DBContext构造函数配置
2.创建数据的策略
2.1当数据库不存在时创建数据库(CreateDatabaseIfNotExists), 默认策略
2.2当数据模型改变时, 先删除数据库, 在重新创建数据库(DropCreateDatabaseWhenModelChanges)
2.3每次都删除原数据库, 创建新的数据库(DropCreateDatabaseAlways)
2.4不对数据库进行任何删除,创建操作(null)
3.实体_表的映射配置
如果实体和表都是单独创建的, 那我们需要实体和表之间的映射关系. 有两种实现方式
3.1 通过属性标注(Attribute)
[Table("Product", Schema = "dbo")] public class Product { [Column("ProductID")] public int ProductID { get; set; } [MaxLength(100)] [Required, Column("ProductName")] public string ProductName { get; set; } [Column("UnitPrice", TypeName = "MONEY")] public decimal UnitPrice { get; set; } }
3.2 通过Fluent API方式, 分两种形式, 见代码1和代码2
protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<Product>().HasKey(t => t.ProductID); modelBuilder.Entity<Product>().Property(t => t.ProductID) .HasColumnName("ProductID") .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); }
public class ProductMap : EntityTypeConfiguration<Product> { public ProductMap() { // Primary Key this.HasKey(t => t.ProductID); // Properties this.Property(t => t.ProductID) .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); this.Property(t => t.ProductName) .IsRequired() .HasMaxLength(100); // Table & Column Mappings this.ToTable("Product"); this.Property(t => t.ProductID).HasColumnName("ProductID"); this.Property(t => t.ProductName).HasColumnName("ProductName"); this.Property(t => t.UnitPrice) .HasColumnName("UnitPrice") .HasPrecision(18, 2); } } //添加配置信息 protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Configurations.Add(new ProductMap()); }