EF中逆变和协变
EF中的增删改查:
实现步骤:
1.声明一个EF的上下文。
bjhksjEntities dbContext = new bjhksjEntities();
2.声明一个实体。
HKSJ_USERS user = new HKSJ_USERS(); user.LoginName = "ssss"; user.Mail = "ssss"; user.PassWord = "ssss"; user.Plane = "ssss"; user.UserName = "ssss"; user.cardNo = "ssss"; user.phone = "ssss";
3.告诉EF对实体做什么操作。
插入: dbContext.HKSJ_USERS.Add(user);
修改和删除的时候必须指定ID: HKSJ_USERS user = new HKSJ_USERS(); user.LoginName = "ssss111--------" user.Mail = "ssss"; user.PassWord = "ssss"; user.Plane = "ssss"; user.UserName = "ssss"; user.cardNo = "ssss"; user.phone = "ssss"; user.ID = 8;
进行修改操作: dbContext.Entry<HKSJ_USERS>(user).State = System.Data.EntityState.Modified;
附加到上下文中进行管理(跟踪才能用SQL Server Profiler工具): dbContext.HKSJ_USERS.Attach(user);
修改单个属性(两种写法): dbContext.Entry<HKSJ_USERS>(user).Property<string>(u => u.LoginName).IsModified = true; dbContext.Entry<HKSJ_USERS>(user).Property("LoginName").IsModified = true;
4.让上下文把变化的实体保存到数据库中。(也是执行Sql脚本的地方)
dbContext.SaveChanges();
遇到这种错误:
实体的属性(非空、不全、超过长度)
上面的错误是没有主键。
数据已经不存在了又做了一个删除操作。或者ID没有赋值
聚簇索引和非聚簇索引的区别:
聚簇索引:索引的顺序和数据存储的顺序一致。一一对应(Guid一般不设置成聚簇索引 -----Guid无序)
非聚簇索引:(树状结构)要不通过聚簇索引找到数据库表的数据 或者自己找到数据库表的顺序。
ModelFirst生成数据库时注意:
EF在运行时改链接字符串:
dbContext.Database.Connection.ConnectionString=“”;
模型和数据库中的列进行同步:
空白处右击:
然后保存,model层就会自动生成添加列的相对属性。
或者转换所有的T4模板:
模型中添加的字段同步到数据库:
右键根据模型生成数据库:
下一步会生成一个数据库脚本.(执行)
有数据的话手动添加对应的列
Linq表达式和Sql语句的区别:
select * --1 from 表名 as u --2 where u.列名 like '%s%' --3 --执行的顺序 2,3,1 --linq from 表名 where u.列名 like '%s%' select *
EF查询:
这两个意思一样: var temp = from u in dbContext.HKSJ_USERS select u; foreach (var u in dbContext.HKSJ_USERS) { }
Linq表达式的返回类型是IQueryable<T> 继承IEnumerable<T>
![](data:image/png;base64,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RVEU+pPdbt+0aVMul0OVpLIs9/T0OJ1OQRAURREEYcmSJRdccMGCBQv2ri9BwEFX8Zg/5Ol1BJweAKhkCx1NLbl4CtTdPJTP52OxGEVRDMPk8/lkMlkul9FZ9zPEc889d9pppy1YsAAAisWi3+93OBw4jlcqlUwmE41Gg8FgNBrtX2vjxo0jR4687777mpqanE6n2+2ORCLoGSWEoZ988snRRx89f/58dOKSJMVisXK57Pf7c7kcTdMEQQiCwPM8ahN0Ub366qvDhw8PBAIDwDGgAQ1oQP92+jcADgDgOO6KK674wx/+kM1mAaC7u/uUU04ZN26cy+V64403brjhhpaWFo7jHA7H559/fv3112/evLmjo+Pxxx+/6qqrnn766cGDB9tstosvvhgF8Gu12uLFi0899VSbzXb44YePGzeusbGRoqhFixZddtllY8eOPeOMMy655JLhw4fbbLZx48bF4/FVq1YNGzbssMMOs9lsw4cPnzt3bv+QvbW1derUqT/84Q9/9KMfHX300Q899BAKDORyuWnTpqGNHHnkkRMmTPD7/XUCx6BBg957773+/MWsWbNuvvnm9evXo4G+y+W68847586dq2kaTdMAsHnz5qFDhyIg0HUdDPhk0eIrx/z2sYkPjfzVBT/8zvfOHnbm7TfcnAxF3T326668+oG77k1F4mBAPp+fPHnyX/7yl0wmQ1HUBx98gOIlhxxyyLhx4zo6OhAz3XfffaNHj25paSkUCs8+++zVV199//33syybyWQ++uij0aNH22y2I4444pJLLmlvbweASCRyzTXXDB8+/IILLjj++ONPOumkSZMmlUolADBNE8OwBQsW7A8cpVLpjjvuGDJkyFFHHXXaaadt2LABPY47ABwDGtCABvQfoH8D4DBNkyTJMWPGjBo1yul0okH2yJEjf/7zn7tcrs2bN48cOfKxxx5Dn7/44ou33357Pp/3er233nrroEGDrr766ieffPLGG2+02WwPPPAAQRAej+exxx6bOnXqvffe+/vf//6cc8659tprc7ncnDlzDjvssN/+9rdjxowZPHjwFVdc8atf/eriiy9ubGxsb29/9dVXX3vttXHjxh133HHLly9H0ZRqtXrXXXcNHjx47NixTz311JQpU5544okVK1ZomrZq1aqbbrpp6tSpzzzzzJVXXnnuuec+8sgjGIapdQDHsccei3aBtHbt2uuuu+7xxx8vFoumaU6ePHno0KFr1qzRNI1lWVmWly1bds4558yfPx9VS8gMv3b5qhP+67gzh552+w03P3DXvZeNuuSCc37Z0dQiM/zdt91x6s9O7mxuA4CPPvro5JNPnjFjBgA0NjZedtlll19++ZNPPvnMM8/86le/+v3vf9/V1ZXNZi+66KKRI0fOnj37qaeeGjNmzKpVqxAIbt269bnnnps8efLUqVPvvvvu3/zmN9ddd10sFgsEAiNGjDjqqKMmTJjwyiuv3Hvvveeff/5LL72UzWZRpmnJkiX7A8fVV199zjnn3HrrrS+88MKNN954/fXXL1y4cAA4BjSgAQ3oP0P/BsBBkmQqlbrkkksuuugiu92ONn7nnXeee+65Ho8nm83ec889I0eOBIBoNDpmzJiXX37ZMIzOzs4rrrhi2LBh7e3tpml2dXUdd9xxd911Fwrp2+32uXPnPvjgg5dccslxxx133nnnlUqlFStWHHbYYW+//faSJUtGjRq1c+fOZ5555sQTT1ywYAGqnwCAZcuWnXjiiYsWLUI9bjKZfOihh+68884dO3agLReLxUqlgp7X2Lhx48cffzxp0qSLLrpo0KBBV111VaVSUesAjhNOOGHbtm39wIHj+MyZM6+44oqmpqZEInHeeeddfPHF+XyeZdl8Po9SKqeffvq7776LnjXFCuXPVqw+/+xzn3p0UtjjL6ayc2e+87Njj/9g3gKw4P05839wxFGvTH2pmi89+OCDZ599dnd3t2EYd91119lnn718+XJ0sq+99tqQIUPeeustDMNuu+22E0888bTTThsyZMjdd9+Nql5qtRrHcZVKZfv27ZMnTx4zZszQoUOHDh3a0tLS19d33nnnXXrppR6PBwAaGhpGjBhx0003BYNBdEYHTKkce+yxZ5111tixY+++++6RI0cOHjx48uTJA8AxoAENaED/Gfo3AA4cx8vl8vjx4y+99NIdO3ZwHIdh2IgRI66++mqUdGhpabnoootWr169bdu20aNHt7W1AUAoFLrmmmuuvPJKv99vGEZjY+Phhx9+++2367q+a9euyy677PDDD//Od77z3e9+12azDR06tFAobN68ediwYdu3b9+6deuoUaPQA5y/+MUvNm3apOs6Sl6sXLnyZz/7GeopAaC5ufk3v/nNLbfcks/nZVmm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y1/+sud5jDHHceoejk6nA+DJkyfvvffe5uamlJIQMhwOTyfYGI5GjV6uXrzhoLReQsPUhqPd3v7CF/7h1VdfNcYASNMUQBRFZ/7fxnA0atSo1pmG43Of+9zi4mK9PRgMCCHf+c53vvjFL7722mvf/va3L168ePfuXcuymh6ORo3+DPXiDUeWhQCKQtRzODqdvc985m9ff/312dJu2/aZCTaGo1GjRrWKoqhO6cKFC7du3WKMLS4uXrp0Kcuy73//+5cuXapbMpzzdrvd6/WaSaONGv0Z6sUbjrpjw/ftKHIBHcfeK6/8zRtvvHFUmDnnSik0QyqNGjX6PfXqq6+ura398Ic//N73vvfWW29du3YtCIILFy4sLS1tbGzUEWY4HBJCTp/bGI5GjV6u/hivxQKosiz0POvddy9/85v/9olP/EVjOBo1avSH62tf+9oPfvCDd955p9frbW5uvvnmm2EY/vjHP7548aLrugCMMVVVZVl2+tzGcDRq9HL14g2HMdy2+3HspWnwxhv/+ld/9Zcf/3hjOBo1avQCdOPGjffff384HLquW1XVV7/61bfffvvOnTvvvPMO57wsy3paehzHp89tDEejRi9Xf6QeDgiRExJvbT29evUXn/rUXzeGo1GjRn+46lW/ut2u4ziMsZWVlddff31paandbhNCsmyynHFjOBo1+jPUizccjKVARcjka8iMpa+99s+N4WjUqNEfLgBRFLmuW6/lY4xptVr16j6e59UvygLQWp8+tzEcjRq9XP0PidPWGpfZCt4AAAAASUVORK5CYII=)
out 输出参数(干涉返回值) --子类的泛型集合传给父类的泛型集合 协变 外面使用的是父类的泛型集合 编译阶段补充完整代码,本质还是内部进行转换,只不过是编译不对其报错。
in 输入参数(干涉传入的参数) --父类的泛型集合传给子类的泛型集合 逆变 (使用的时候安全 不是赋值的时候安全)
这样是不对的:
List<int> listInt = new List<int>() { 1, 2, 3 }; List<object> listObj = listInt;
错误如下:
IQueryable<HKSJ_USERS> temp = from u in dbContext.HKSJ_USERS where u.ID > 4 select u; //把子类泛型集合交给父类的泛型集合。协变。 IQueryable<object> parent = temp;
2、逆变,还是为了安全。把父类的泛型给子类的泛型对象。 Action<object> b = (target) => { Console.WriteLine(target.GetType().Name); }; Action<HKSJ_USERS> d = b; d(new HKSJ_USERS()); 赋值的时候是把父类的方法传给子类 使用的时候还是把子类的方法传给父类
Linq to EF:查询实在数据库端进行过滤
内存里面过滤:把数据库中的所有数据都查询到程序里面来之后,在进行过滤。
List集合(Array、Dictionary...)跟IQueryable接口集合的不同点。
这种写法把所有的数据加载到内存中去:(Linq to Object) 条件在内存中进行过滤 数据库中查询所有。(.ToLis立即加载到内存中)本地集合
var demoList = from u in dbContext.HKSJ_USERS.ToList() where u.ID > 4 select u; foreach (var hksjUsers in demoList) { }
对此句代码进行分析:
IQueryable<HKSJ_USERS> temp = from u in dbContext.HKSJ_USERS where u.ID > 4 select u;
初始化了一下IQueryable接口里面的三个参数:(离线集合)
1.Linq 表达式转换成Expression类型
2.给 Type ElementType赋值
3.给IQueryProvider Provider赋值
当用到IQueryable接口集合数据的时候,provider解析 Expression 然后获取相应的数据,进行遍历执行
内部的代码:
Linq的一个工具:(LINQPad)
最后来一张图:本地集合List(分配四个内存):