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

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

     public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; } public virtual ICollection<Order> Orders { get; set; }
} public class Order
{
public int Id { get; set; }
public int ProductId { get; set; }
public DateTime Date { get; set; }
public string ShippingAddress { get; set; } public virtual Product Product { get; set; }
}

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

     public class EntityContext : DbContext
{
public EntityContext()
: base("name=DBConnectionString")
{ } public DbSet<Product> Product { get; set; }
public DbSet<Order> Order { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.AddFromAssembly(Assembly.GetExecutingAssembly());
base.OnModelCreating(modelBuilder);
}
}

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

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

4、接着创建实体映射

     public class ProductMap : EntityTypeConfiguration<Product>
{
public ProductMap()
{
ToTable("Product");
HasKey(p => p.Id);
//这个同OrderMap中注释语句效果一样,默认是级联
HasMany(p => p.Orders).WithRequired(o => o.Product).HasForeignKey(o => o.ProductId).WillCascadeOnDelete(false);
}
} public class OrderMap : EntityTypeConfiguration<Order>
{
public OrderMap()
{
ToTable("Order");
HasKey(o => o.Id);
//WillCascadeOnDelete:不使用级联删除
//HasRequired(o => o.Product).WithMany(p => p.Orders).HasForeignKey(o => o.ProductId).WillCascadeOnDelete(false);
}
}

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

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

6、数据库关系图

最新文章

  1. linux vi(vim)常用命令汇总
  2. 分离与继承的思想实现图片上传后的预览功能:ImageUploadView
  3. getElementById() getElementsByTagName() getElementsByClassName() querySlector() querySlectorAll()区别
  4. 被swoole坑哭的PHP程序员
  5. codeforces 495C. Treasure 解题报告
  6. js 实现栈
  7. 54. Spiral Matrix
  8. failed to obtain a cell from its dataSource
  9. 判断两个XML文件结构与内容是否相同
  10. [原创]普通的MySQL多表连接查询
  11. 第一次c++作业小结
  12. 介质共享型局域网中的介质访问控制(MAC)协议需要具体解决的3个问题,CSMA/CD介质访问控制的基本思想
  13. zabbix 监控 图形化界面文字乱码解决方法
  14. spring深入学习(五)-----spring dao、事务管理
  15. 【转】Centos7安装nodejs
  16. post/get in console of JSarray/js 数组详细操作方法及解析合集
  17. Python MySQLdb 插入数据
  18. Python: re.IGNORECASE 标志参数字符串忽略大小写的搜索替换
  19. 术语-服务:IaaS
  20. linux find grep组合使用

热门文章

  1. 关于main与wmain函数
  2. UR官网特效
  3. USACO Section1.3 Combination Lock 解题报告
  4. isinstance()判断数据类型
  5. python3.x 安装命令
  6. 洛谷P1071潜伏者(提高组)
  7. linux 出错 “INFO: task xxxxxx: 634 blocked for more than 120 seconds.”的3种解决方案(转)
  8. PHP文件操作函数及文件指针理解
  9. 【bzoj1047】[HAOI2007]理想的正方形 二维RMQ
  10. nio的reactor模式