ModelFirst的CRUD

网友投稿 254 2022-09-05

ModelFirst的CRUD

创建实体:

创建上下文:

创建一个用户的实体:

UserInfo userInfo = new UserInfo(); userInfo.UName = "sunliyuan";

对实体进行添加操作:

dbContext.UserInfo.Add(userInfo);

添加两个订单:

OrderInfo order1 = new OrderInfo(); order1.Content = "shit1"; dbContext.OrderInfo.Add(order1); OrderInfo order2 = new OrderInfo(); order2.Content = "shit2"; dbContext.OrderInfo.Add(order2);

关联三个实体:(用户和订单一对多)

1.通过用户添加订单实体到自己的导航属性

userInfo.OrderInfo.Add(order1);

2.通过订单指定用户的实体:

order2.UserInfo = userInfo;

order2.UserInfoID = userInfo.ID;

把上面实体的变化封装成sql执行到数据库中:

dbContext.SaveChanges();

修改:

UserInfo userInfoEdit =new UserInfo();

userInfoEdit.ID = 1; userInfoEdit.UName = "Demo" + DateTime.Now; dbContext.Entry(userInfoEdit).State = EntityState.Modified; //修改某个字段 dbContext.Entry(userInfoEdit).Property(u => u.UName).IsModified = true;

查询:(数据量小的时候使用Include)

IQueryable temp = from u in dbContext.UserInfo.Include("OrderInfo") where u.UName.Contains("o") && u.UName.StartsWith("D") select u;IQueryable<>==var注:能连续写where条件 相当于拼结

两种延迟加载:

用到的时候就会去查询数据。把集合缓存起来 foreach (var userInfo in temp) { Console.WriteLine(userInfo.ID + " " +userInfo.UName); } foreach (var userInfo in temp) { Console.WriteLine(userInfo.ID + " " + userInfo.UName); } var temp2 = from u in temp where u.ID > 0 select u; //会组成一个SQL脚本 foreach (var userInfo in temp2) { Console.WriteLine(userInfo.ID + " " + userInfo.UName); }

第二种:延迟加载  导航属性  (数据量大时使用延迟加载)

foreach (var userInfo in temp)//100个用户数据。 101:跟后台交互的时间就比 一次连接表查询时间还要长。 { foreach (var orderInfo in userInfo.OrderInfo) { Console.WriteLine(userInfo.UName+ " " +orderInfo.ID + " " + orderInfo.Content); } }

大数据查询的方法:

1.把链接查询分解,转成单个大表的查询。最后在内存中组装数据

2.临时表(解决死锁的问题)

select * into #table from UserInfo一个#代表临时表两个## 代表全局临时表

EF的原理:

这是ModelFirst拿XML打开的文件:

第一个是表的定义。(存储定义语言)  第二个:表实体的描述(概念模型)   第三个:映射关系

根据实体的状态和映射关系生成相应的SQL脚本

Lambda表达式可以转换成Expression类型

Lambda语句转换不成Expression类型

Lambda 简单的查询:

var data = dbContext.UserInfo.Where(u => u.ID > 0); foreach (var userInfo in data) { Console.WriteLine(userInfo.ID + " " + userInfo.UName); }

Linq和Lambda性能有什么不同?

运行阶段一样   编译阶段有些不同

Linq--》Expression

Lambda---》Expression

分页:

var pagedata = dbcontext.userinfo .where(u => u.id > 0) //.orderby(u=>u.id)//升序 .orderbydescending(u => u.id) //一页5条 取 3页 .skip(5 * (3 - 1)) .take(5); foreach (var userInfo in pageData) { }

查询部分列:

var demo = (from u in dbContext.UserInfo where u.ID > 0 orderby u.ID descending select u).Skip(10).Take(5); //Linq表达式 var data = from u in dbContext.UserInfo select new {MyUName=u.UName,u.ID,OrderCounts= u.OrderInfo.Count}; //Lambda var data = dbContext.UserInfo.Where(u => u.ID > 0) .Select(u => new {u.ID, MyUName = u.UName, OrderCounts = u.OrderInfo.Count}); foreach (var item in data) { Console.WriteLine(item.ID + " " + item.MyUName + " " + item.OrderCounts); }

CodeFirst模式:

public UserInfo() { OrderInfo =new HashSet(); } [Key] public int Id { get; set; } public string SName { get; set; } public int Age { get; set; } public string Email { get; set; } public virtual ICollection OrderInfo { get; set; }

public class OrderInfo { [Key] public int Id { get; set; } public string Content { get; set; } public virtual UserInfo UserInfo { get; set; } }

public class CodeFirstDbContext : DbContext { public CodeFirstDbContext() : base("name=DataModelContainer") { } protected override void OnModelCreating(DbModelBuilder modelBuilder) { //throw new UnintentionalCodeFirstException(); } public DbSet UserInfo { get; set; } public DbSet OrderInfo { get; set; } }

数据库配置:

支持MySql

static void Main(string[] args) { using (CodeFirstDbContext dbContext = new CodeFirstDbContext()) { dbContext.Database.CreateIfNotExists(); UserInfo userInfo = new UserInfo(); userInfo.Age = 10; userInfo.Email = "ssss"; userInfo.SName = "ssss"; dbContext.UserInfo.Add(userInfo); dbContext.SaveChanges(); } Console.WriteLine("ok...."); Console.ReadKey(); }

EF图解:

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:七夕创意营销盘点,磕CP只是基本操作!
下一篇:DDD领域模型企业级系统(二)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~