注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

gb.qin

A Man's心靈的港灣

 
 
 

日志

 
 

EF复杂对象的保存总结(集)  

2012-12-11 08:07:48|  分类: EF |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

订单Order->订单项OrderItem->商品Good->零件Part

 

其中订单和订单项一对多,商品和订单项一对多,商品和零件多对多。

 

 

代码:

public class Order

{

[Key()]

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]

public int ID { getset; }

 

public string Name { getset; }

 

public virtual List<OrderItem> OrderItems { getset; }

 

public Order()

{

OrderItems = new List<OrderItem>();

}

}

public class OrderItem

{

[Key()]

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]

public int ID { getset; }

 

public string Name { getset; }

 

public int GoodID { getset; }

public virtual Good Good { getset; }

 

public int OrderID { getset; }

public virtual Order Order { getset; }

}

public class Good

{

[Key()]

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]

public int ID { getset; }

 

public string Name { getset; }

 

public virtual List<OrderItem> OrderItems { getset; }

public virtual List<Part> Parts { getset; }

 

public Good()

{

OrderItems = new List<OrderItem>();

Parts = new List<Part>();

}

}

public class Part

{

[Key()]

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]

public int ID { getset; }

public string Name { getset; }

public virtual List<Good> Goods { getset; }

public Part()

{

Goods = new List<Good>();

}

}

public class CDbContext : DbContext

{

private readonly static string CONNECTION_STRING = "name=Test_ConnString";

public CDbContext()

base(CONNECTION_STRING)

{

 

}

 

public DbSet<Order> OrderSet { getset; }

public DbSet<OrderItem> OrderItemSet { getset; }

public DbSet<Good> GoodSet { getset; }

public DbSet<Part> PartSet { getset; }

 

protected override void OnModelCreating(DbModelBuilder modelBuilder)

{

modelBuilder.Entity<Order>().HasMany<OrderItem>(i => i.OrderItems)

.WithRequired(i => i.Order).HasForeignKey(i => i.OrderID);

 

modelBuilder.Entity<OrderItem>().HasRequired<Good>(i => i.Good)

.WithMany(i => i.OrderItems)

.HasForeignKey(i => i.GoodID);

 

modelBuilder.Entity<Good>().HasMany<Part>(i => i.Parts)

.WithMany(i => i.Goods).Map(i => i.MapLeftKey("GoodID")

.MapRightKey("PartID").ToTable("GoodPart"));

}

}

public class CDbInit : DropCreateDatabaseIfModelChanges<CDbContext>

{

protected override void Seed(CDbContext context)

{

//var part = new Part();

//part.Name = "Part1";

//context.PartSet.Add(part);

//context.SaveChanges();

}

}

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<connectionStrings>

<add name="Test_ConnString"

connectionString="Persist Security Info = true;Data Source=SINPC\SIN2000;Initial Catalog=TestDb;User Id=sa;Password=sa;"

providerName="System.Data.SqlClient"/>

</connectionStrings>

</configuration>

private void button1_Click(object sender, EventArgs e)

{

Part part = new Part();

Good good = new Good();

 

using (CDbContext context = new CDbContext())

{

part.Name = "part1";

 

good.Name = "rice1";

good.Parts.Add(part);

 

Order order = new Order();

order.Name = "order1";

 

OrderItem item = new OrderItem();

 

item.Good = good;

item.Order = order;

 

item.Name = "item1";

 

order.OrderItems.Add(item);

 

context.OrderSet.Add(order);

context.SaveChanges();

}

}

static class Program

{

/// <summary>

/// The main entry point for the application.

/// </summary>

[STAThread]

static void Main()

{

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

Database.SetInitializer<CDbContext>(new CDbInit());

Application.Run(new Form1());

}

}

 

 

要保存一个复杂对象,不需要一个简单对象一个简单对象的保存,EF会自动帮我们把简单对象同时保存。

只需要理清这个复杂对象的一条线,通往各简单对象。就可以实现复杂对象的保存,另外

EF还会自动识别哪些简单对象需要保存,哪些不需要保存。

  评论这张
 
阅读(1114)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017