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

天涯倦客的博客

祝福你朋友永远快乐!

 
 
 

日志

 
 

ASP.NET使用EF时的seed方法以及初始数据的构造  

2017-07-28 09:43:38|  分类: EF |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

转自:http://blog.csdn.net/hellochenlu/article/details/50981552

seed方法:

Seed() 方法是什么呢? 依照它原来的注解 "This method will be called after migrating to the latest version", 字面上是说这个 Seed() 方法会在我们 migrate 到最近的版本时会被呼叫; 实际上就是说, 如果我们已经设定好 Migration , 当我们执行了 Update-Database 指令时, EF 就会自动去呼叫并执行这个 Seed() 方法。

Seed() 方法会在你每次你执行 Update-Database 指令时被呼叫一次。所以你可以试试看再加入一笔 "凯达格达大道3号", 再执行一次 Update-Database 指令, 资料库中就会多出那一笔。换句话说, 你可以使用同样的方法一直往资料库裡加入资料。
话说回来, 或许你必须思考一下, 你会在什么时候使用 Seed() 方法在资料库中塞入资料? 
一般而言, 我们在程式中套用 EF 绝对不是为了可以使用 Seed() 方法塞入资料。

但是我们一定有很多时候会希望在资料库一建立时就加上一些固定而不容易异动的资料,例如自己公司的地址, 或者一些测试资料。所以 Seed() 方法的确是开发者的绝佳帮手。

[csharp] view plain copy
 print?
  1. namespace WechatCommerceSys.DAL.Migrations  
  2. {  
  3.     using System;  
  4.     using System.Collections.Generic;  
  5.     using System.Data.Entity;  
  6.     using System.Data.Entity.Migrations;  
  7.     using System.Linq;  
  8.     using WechatCommerceSys.Model;  
  9.   
  10.     internal sealed class Configuration : DbMigrationsConfiguration<WechatCommerceSys.DAL.WechatCommerceContext>  
  11.     {  
  12.         public Configuration()  
  13.         {  
  14.             AutomaticMigrationsEnabled = false;  
  15.         }  
  16.   
  17.         protected override void Seed(WechatCommerceContext context)  
  18.         {  
  19.             const string imgUrl = "~/Images/placeholder.png";  
  20.              
  21.   
  22.             var genres = AddGenres(context);  
  23.             AddProducts(context, imgUrl, genres);  
  24.             context.SaveChanges();  
  25.               
  26.         }  
  27.   
  28.   
  29.         private static void AddProducts(WechatCommerceContext context, string imgUrl, List<Genre> genres)  
  30.         {  
  31.             context.Products.Add(new Product {ProductId = Guid.NewGuid(), GenreId = genres.Single(g => g.GenreName == "蔬菜").GenreId, ProductName = "The Best Of The Men At Work", Genre = genres.Single(g => g.GenreName == "蔬菜"), Price = 8.99M, ProductImgUrl = imgUrl });  
  32.             context.Products.Add(new Product { ProductId = Guid.NewGuid(), GenreId = genres.Single(g => g.GenreName == "水果").GenreId, ProductName = "And Justice For All", Genre = genres.Single(g => g.GenreName == "蔬菜"), Price = 8.99M, ProductImgUrl = imgUrl });  
  33.             context.Products.Add(new Product { ProductId = Guid.NewGuid(), GenreId = genres.Single(g => g.GenreName == "毒品").GenreId, ProductName = "Black Light Syndrome", Genre = genres.Single(g => g.GenreName == "蔬菜"), Price = 8.99M, ProductImgUrl = imgUrl });  
  34.             //context.Products.Add(new Product { ProductName = "10,000 Days", Genre = genres.Single(g => g.GenreName == "蔬菜"), Price = 8.99M, ProductImgUrl = imgUrl });  
  35.             //context.Products.Add(new Product { ProductName = "11i", Genre = genres.Single(g => g.GenreName == "水果"), Price = 8.99M, ProductImgUrl = imgUrl });  
  36.             //context.Products.Add(new Product { ProductName = "1960", Genre = genres.Single(g => g.GenreName == "水果"), Price = 8.99M, ProductImgUrl = imgUrl });  
  37.             //context.Products.Add(new Product { ProductName = "4x4=12 ", Genre = genres.Single(g => g.GenreName == "水果"), Price = 8.99M, ProductImgUrl = imgUrl });  
  38.             //context.Products.Add(new Product { ProductName = "A Copland Celebration, Vol. I", Genre = genres.Single(g => g.GenreName == "水果"), Price = 8.99M, ProductImgUrl = imgUrl });  
  39.             //context.Products.Add(new Product { ProductName = "A Lively Mind", Genre = genres.Single(g => g.GenreName == "水果"), Price = 8.99M, ProductImgUrl = imgUrl });  
  40.             //context.Products.Add(new Product { ProductName = "A Matter of Life and Death", Genre = genres.Single(g => g.GenreName == "零食"), Price = 8.99M, ProductImgUrl = imgUrl });  
  41.             //context.Products.Add(new Product { ProductName = "A Real Dead One", Genre = genres.Single(g => g.GenreName == "零食"), Price = 8.99M, ProductImgUrl = imgUrl });  
  42.             //context.Products.Add(new Product { ProductName = "A Real Live One", Genre = genres.Single(g => g.GenreName == "零食"), Price = 8.99M, ProductImgUrl = imgUrl });  
  43.             //context.Products.Add(new Product { ProductName = "A Rush of Blood to the Head", Genre = genres.Single(g => g.GenreName == "零食"), Price = 8.99M, ProductImgUrl = imgUrl });  
  44.             //context.Products.Add(new Product { ProductName = "A Soprano Inspired", Genre = genres.Single(g => g.GenreName == "零食"), Price = 8.99M, ProductImgUrl = imgUrl });  
  45.             //context.Products.Add(new Product { ProductName = "A Winter Symphony", Genre = genres.Single(g => g.GenreName == "零食"), Price = 8.99M, ProductImgUrl = imgUrl });  
  46.   
  47.         }  
  48.   
  49.         private static List<Genre> AddGenres(WechatCommerceContext context)  
  50.         {  
  51.             var genres = new List<Genre>  
  52.             {  
  53.                 new Genre { GenreName = "蔬菜", GenreId = Guid.NewGuid() },  
  54.                 new Genre { GenreName = "水果" , GenreId = Guid.NewGuid()},  
  55.                 new Genre { GenreName = "毒品" , GenreId = Guid.NewGuid()},  
  56.                 new Genre { GenreName = "零食", GenreId = Guid.NewGuid() },  
  57.                   
  58.             };  
  59.   
  60.             genres.ForEach(s => context.Genres.Add(s));  
  61.             context.SaveChanges();  
  62.             return genres;  
  63.         }  
  64.           
  65.     }  
  66.   
  67. }  

以上是一个configuration.cs文件的实例。

注意事项:

1、guid字段必须初始化。初始化方法如下

ProductId = Guid.NewGuid()

2、可以用如下方式表示外键关联

GenreId = genres.Single(g => g.GenreName == "蔬菜").GenreId,

3、不一定要为每一个字段都赋值,但是必须为每一个required字段赋值

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

历史上的今天

在LOFTER的更多文章

评论

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

页脚

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