实战EntityFramework
删除对象一定要在同一个context
我尝试这在两个方法中使用两个context(Container)实例来进行一个获得一个删除,结果我获得的”The object cannot be deleted because it was not found in the ObjectStateManager“错误;后来尝试在一个方法体中共享一个容器,正常删除;所以删除一定要在同一个容器中来进行处理,因为delete本身是将Entity的状态设置为删除,前提是容器中已经装载了改实体;实体的装载是发生在一次”GetObjectByID“之类的Get操作之后,所以一个新建的容器,直接处理之前别的容器获得Entity,当然找不到了。所以对于封装容器操作,最好做一个全局的容器,这样比较有意义,少new很多实例,而且可以保证行为一致性。
EntityKey
检索对象,少不了EntityKey,一下是代码:
IEnumerable<KeyValuePair<string, object>> entityKeyValues = new KeyValuePair<string, object>[]
{
new KeyValuePair<string, object>("Id", pID)
};
string[] names = pEntity.GetType().ToString().Split('.');
string entitySetName = "Model1Container." + names[names.Length - 1];
Model1Container context = new Model1Container();
EntityKey key = new EntityKey(entitySetName, entityKeyValues);
object obj = context.GetObjectByKey(key);
enttiySetName是亮点,如何来确定他的值呢?看容器定义文件
public Model1Container() : base("name=Model1Container", "Model1Container")
默认实例传送的”defaultContainerName“就是”Model1Container“,然后,实体集的名字就是容器的名称+类名;
检索方式
以下两种方式都是可以,复杂一点的查询可以使用第一种,对于单表操作返回字段没有特殊处理的使用第二种即可:
方法一:
var query = from p in container.workflowsequeuece
where p.WFID == wf.Id && !p.PassedFlg.Value
select p;
方法二:
container.workflowsequeuece.Where(p => p.WFID == wf.Id && !p.PassedFlg.Value);
获取自增Identity
在EF中context.SaveChanges()方法,会将标记为Added行写会到DB中,同时,如果列是自增的,那么会自动填充主键列;
我早起对于workflow表没有设定自增,此事生成了EDMX文件,以后再修改为自增,即使同步EF,也没有生效;于是手工操作:
<EntityType Name="workflow">
<Key>
<PropertyRef Name="Id" />
</Key>
<Property Name="Id" Type="int" Nullable="false" StoreGeneratedPattern="Identity" />
<Property Name="Name" Type="varchar" MaxLength="100" />
<Property Name="Description" Type="varchar" />
…
</EntityType>
下划线部分即表示该列被标记为自增主键; context共享谨慎 每次查询操作都需要先创建一个context,如果只是使用一个context将会导致一个问题:你获取的数据时缓存的数据;如果需要实时获取数据,需要每次都new一个context是正道。
实战EntityFramework的更多相关文章
- Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- 【无私分享:ASP.NET CORE 项目实战(第三章)】EntityFramework下领域驱动设计的应用
目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 在我们 [无私分享:从入门到精通ASP.NET MVC] 系列中,我们其实也是有DDD思想的,但是没有完全的去实现,因为并不是 ...
- .NET WebApi 实战第五讲之EntityFramework事务
在<.NET WebApi 实战第二讲>中我们有提到过事务的概念!任何数据库的读操作可以没有事务,但是写事件必须有事务,如果一个后端工程师在数据库写入时未添加事务,那就不是一个合格的工程师 ...
- 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-1
来个目录吧: 第一章 第二章 第三章 暂时就这么多.后面路线更新吧 本系列文章为翻译加上我个人的使用心得理解,希望帮助热爱学习的程序员. 珍重声明:本系列文章会跟原文有点出入,去掉了罗里吧嗦的文字. ...
- 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-2
来个目录吧: 第一章 第二章 第三章 暂时就这么多.后面路线更新吧 Entity Framework Core Nuget包管理 如果你创建项目的时候启用了个人身份验证的话,项目中就已经包含了EFCo ...
- .NET Core IdentityServer4实战 第三章-使用EntityFramework Core进行持久化配置
内容:本文带大家使用IdentityServer4进行使用使用EntityFramework Core进行配置和操作数据 作者:zara(张子浩) 欢迎分享,但需在文章鲜明处留下原文地址. 前两章内容 ...
- ASP.NET开发实战——(十一)ASP.NET MVC 与数据库之EntityFramework配置与连接字符串
前几篇文章中介绍了如何使用Entity Framework来操作数据库,但是对EF的配置.连接字符串的指定仍然存在一些疑问,EF可以通过两种方式来实现配置,分别是代码方式和配置文件. 本章将通过以下几 ...
- 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-3
来个目录吧: 第一章 第二章 第三章 暂时就这么多.后面路线更新吧 创建.查询.更新.删除 这章主要讲解使用EF完成 增删改查的功能. 自定义"详情信息"页面 我们通过基架生成的代 ...
- 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-4
来个目录吧: 第一章-入门 第二章- Entity Framework Core Nuget包管理 第三章-创建.修改.删除.查询 第四章-排序.过滤.分页.分组 第五章-迁移,EF Core 的co ...
随机推荐
- spark 启动时候报 Unable to load native-hadoop library for your platform 警告
hadoop2.6.4 jdk1.8 spark2.0.1 方案1: 在spark的conf目录下,修改spark-env.sh文件加入LD_LIBRARY_PATH环境变量,值为hadoop的nat ...
- 在world2013中插入GB_2312
文字添加方法: 1.下载字体并解压 2.开始中打开控制面板 3.在控制面板中打开字体文件夹 4.把下载的字体复制到此文件下 5.文字添加完成.
- Docker官方文档翻译之入门
转自:http://www.cnblogs.com/vikings-blog/p/3958091.html Docker学习总结之docker入门 Understanding Docker 以下均翻译 ...
- mysql创建数据库(指定编码)
如下脚本创建数据库yourdbname,并制定默认的字符集是utf8. CREATE DATABASE IF NOT EXISTS yourdbname DEFAULT CHARSET utf8 CO ...
- BootStrap-table 客户端分页和服务端分页的区别
当服务器没有对数据进行分页时,前端页面设计又要求进行分页,要分开来设置. 服务端分页: responseHandler: function(data){ return data.response; } ...
- Android Layout布局文件里的android:layout_height等属性不起作用
有的时候,我们配置好的布局文件,在加载完成添加到我们的Activity中后发现,并没有安装我们设置的属性 来布局,比为我们设置了android:layout_marginTop="100di ...
- SpringMVC DispatcherServlet 说明与web配置
使用Spring MVC,配置DispatcherServlet是第一步. DispatcherServlet是一个Servlet,所以能够配置多个DispatcherServlet. Dispatc ...
- 实用技巧:简单而有用的nohup命令介绍(转)
简单而有用的nohup命令在UNIX/LINUX中,普通进程用&符号放到后台运行,如果启动该程序的控制台logout,则该进程随即终止. 要实现守护进程,一种方法是按守护进程的规则去编程(本站 ...
- codevs 1170 双栈排序
/* 好题啊 好题啊 而然还是看了一眼题解啊 有那么一点思路 但是离写出代码还很远 考虑必须分开放倒两个栈里的情况 即存在i<j<k 有 a[k]<a[i]<a[j] 这里RM ...
- 自己写的自动生成动态边框的jquery小插件
思路就是在元素四周添加<ul>列表,然后周期性地改变它的颜色,实现动态的效果,不支持ie7.ie8 预览链接http://gorey.sinaapp.com/myBorder/border ...