zoukankan      html  css  js  c++  java
  • EntityFramework之一对多关系(三)

    上篇介绍了一对一关系,下面介绍下一对多关系代码编写。

    1、新建model实体,Product是产品类,Order是订单,一个产品对应多个订单

     1     public class Product
     2     {
     3         public int Id { get; set; }
     4         public string Name { get; set; }
     5         public string Description { get; set; }
     6 
     7         public virtual ICollection<Order> Orders { get; set; }
     8     }
     9 
    10     public class Order
    11     {
    12         public int Id { get; set; }
    13         public int ProductId { get; set; }
    14         public DateTime Date { get; set; }
    15         public string ShippingAddress { get; set; }
    16 
    17         public virtual Product Product { get; set; }
    18     }

     2、创建一个EntityContext并继承自DbContext

     1     public class EntityContext : DbContext
     2     {
     3         public EntityContext()
     4             : base("name=DBConnectionString")
     5         {
     6 
     7         }
     8 
     9         public DbSet<Product> Product { get; set; }
    10         public DbSet<Order> Order { get; set; }
    11 
    12         protected override void OnModelCreating(DbModelBuilder modelBuilder)
    13         {
    14             modelBuilder.Configurations.AddFromAssembly(Assembly.GetExecutingAssembly());
    15             base.OnModelCreating(modelBuilder);
    16         }
    17     }

      3、在web.config文件中添加数据库连接字符串

    1   <connectionStrings>
    2     <add name="DBConnectionString" connectionString="Data Source=.;Initial Catalog=OneToMany;Integrated Security=true" providerName="System.Data.SqlClient" />
    3   </connectionStrings>

     4、接着创建实体映射

     1     public class ProductMap : EntityTypeConfiguration<Product>
     2     {
     3         public ProductMap()
     4         {
     5             ToTable("Product");
     6             HasKey(p => p.Id);
     7             //这个同OrderMap中注释语句效果一样,默认是级联
     8             HasMany(p => p.Orders).WithRequired(o => o.Product).HasForeignKey(o => o.ProductId).WillCascadeOnDelete(false);
     9         }
    10     }
    11 
    12     public class OrderMap : EntityTypeConfiguration<Order>
    13     {
    14         public OrderMap()
    15         {
    16             ToTable("Order");
    17             HasKey(o => o.Id);
    18             //WillCascadeOnDelete:不使用级联删除
    19             //HasRequired(o => o.Product).WithMany(p => p.Orders).HasForeignKey(o => o.ProductId).WillCascadeOnDelete(false);
    20         }
    21     }

      5、我们写一些操作,让Code First生成数据库并验证数据是否新增

     1     EntityContext db = new EntityContext();
     2     var product = new Product() { Description = "电器", Name = "电磁炉" };
     3     db.Set<Product>().Add(product);
     4     db.SaveChanges();
     5 
     6     var order = new Order() { Date = DateTime.Now, ProductId = product.Id, ShippingAddress = "江西南昌" };
     7     db.Set<Order>().Add(order);
     8     db.SaveChanges();
     9     
    10     //表连接
    11     var list = db.Set<Product>().Include("Orders").ToList();

     6、数据库关系图

  • 相关阅读:
    ES6模块
    遍历数组和对象的方法
    JVM知识(六):linux环境下查看JVM内存大小
    WebSocket实时消息推送
    SpringBoot中基于Mybatis多数据源操作
    浅谈Redis中的雪崩和穿透及击穿。
    Hibernate与Mybatis的区别
    Java动态代理和反射机制
    JSON对象和JSON字符串的区别
    JVM知识(五):垃圾回收算法
  • 原文地址:https://www.cnblogs.com/zuqing/p/5452334.html
Copyright © 2011-2022 走看看