fluent api用于onmodelcreating里,可以实现比attribute更强更灵活的配置
public partial class StoreDBContext : DbContext { public virtual DbSet<OrderDetails> OrderDetails { get; set; } public virtual DbSet<Orders> Orders { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (!optionsBuilder.IsConfigured) { optionsBuilder.UseSqlServer(@"Data Source=(localdb)ProjectsV13;Initial Catalog=StoreDB;"); } } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<OrderDetails>(entity => { entity.HasKey(e => e.OrderDetailId); entity.HasIndex(e => e.OrderId); entity.Property(e => e.OrderDetailId).HasColumnName("OrderDetailID"); entity.Property(e => e.OrderId).HasColumnName("OrderID"); entity.Property(e => e.ProductId).HasColumnName("ProductID"); entity.HasOne(d => d.Order) .WithMany(p => p.OrderDetails) .HasForeignKey(d => d.OrderId); }); modelBuilder.Entity<Orders>(entity => { entity.HasKey(e => e.OrderId); entity.Property(e => e.OrderId).HasColumnName("OrderID"); entity.Property(e => e.CustomerId).HasColumnName("CustomerID"); entity.Property(e => e.EmployeeId).HasColumnName("EmployeeID"); }); } }
主键:HasKey
protected override void OnModelCreating(ModelBuilder modelBuilder) { { modelBuilder.Entity<OrderDetail>() .HasKey(b => b.OrderDetailID); } }
并发令牌IsConcurrencyToken
protected override void OnModelCreating(ModelBuilder modelBuilder) { { modelBuilder.Entity<Person>() .Property(p => p.LastName) .IsConcurrencyToken(); } }
忽略 ignore
class MyContext : DbContext { public DbSet<Blog> Blogs { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Ignore<BlogMetadata>(); } }
或
class MyContext : DbContext { public DbSet<Blog> Blogs { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Blog>() .Ignore(b => b.LoadedFromDatabase); } } public class Blog { public int BlogId { get; set; } public string Url { get; set; } public DateTime LoadedFromDatabase { get; set; } }
必填 Required
class MyContext : DbContext { public DbSet<Blog> Blogs { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Blog>() .Property(b => b.Url) .IsRequired(); } } public class Blog { public int BlogId { get; set; } public string Url { get; set; } }
表映射
public class Order { public int OrderID { get; set; } public int CustomerID { get; set; } public int EmployeeID { get; set; } public DateTime OrderDate { get; set; } } class MyContext : DbContext { public DbSet<Order> Orders { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Order>() .ToTable("OrdersData"); } }
列映射
class MyContext : DbContext { public DbSet<Order> Orders { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Order>() .Property(b => b.OrderID) .HasColumnName("Order_Id"); } }
外键
public partial class StoreDBContext : DbContext { public virtual DbSet<OrderDetails> OrderDetails { get; set; } public virtual DbSet<Orders> Orders { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<OrderDetails>(entity => { entity.HasKey(e => e.OrderDetailId); entity.HasIndex(e => e.OrderId); entity.Property(e => e.OrderDetailId).HasColumnName("OrderDetailID"); entity.Property(e => e.OrderId).HasColumnName("OrderID"); entity.Property(e => e.ProductId).HasColumnName("ProductID"); entity.HasOne(d => d.Order) .WithMany(p => p.OrderDetails) .HasForeignKey(d => d.OrderId); }); } }
Default Schema
class MyContext : DbContext { public DbSet<Order> Orders { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { //Configure default schema modelBuilder.HasDefaultSchema("Admin"); } }
组合列
class MyContext : DbContext { public DbSet<Person> People { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Person>() .Property(p => p.DisplayName) .HasComputedColumnSql("[LastName] + ', ' + [FirstName]"); } } public class Person { public int PersonId { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string DisplayName { get; set; } }
序列
class MyContext : DbContext { public DbSet<Order> Orders { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.HasSequence<int>("OrderNumbers"); } } public class Order { public int OrderId { get; set; } public int OrderNo { get; set; } public string Url { get; set; } }
默认值
class MyContext : DbContext { public DbSet<Blog> Blogs { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Blog>() .Property(b => b.Rating) .HasDefaultValue(3); } } public class Blog { public int BlogId { get; set; } public string Url { get; set; } public int Rating { get; set; } }
索引
class MyContext : DbContext { public DbSet<Blog> Blogs { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Blog>() .HasIndex(b => b.Url) .HasName("Index_Url"); } } public class Blog { public int BlogId { get; set; } public string Url { get; set; } }
Alternate Key
class MyContext : DbContext { public DbSet<Car> Cars { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Car>() .HasAlternateKey(c => c.LicensePlate) .HasName("AlternateKey_LicensePlate"); } } class Car { public int CarId { get; set; } public string LicensePlate { get; set; } public string Make { get; set; } public string Model { get; set; } }
默认值
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Order>() .Property(b => b.OrderDate) .HasDefaultValueSql("CONVERT(date, GETDATE())"); }
全局过滤
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Customer>().HasQueryFilter(c => !c.IsDeleted); }