基础设备数据更新中...显示new是什么意思?

3677人阅读
下边是EntityFramework数据更新方面的几个技巧:
&1:如何new一个新实体去更新记录,而不是从数据库中查询一条记录来更新。
&2:如何在更新实体的同时,对导航属性的实体进行一系列的操作。
&3:如何用最简单的代码实现实体的部分更新。
1&new一个新实体去更新记录
EntityFramework有一个特点,你无须查询出一个记录,而是new一个新实体,然后对其进行删除或更新操作,只须提供实体的ID即可,如果ID不存在将会抛出异常。这样有助于提高性能,毕竟减少了一次数据库访问。要实现用一个新实体去更新记录,你得让EF的Change Tracker跟踪该实体,让它认为该实体就是从数据库中取出来的,只要让改该实体处于修改状态就行了,代码如下:
context.Entry&TEntity&(entity).State = EntityState.M
context.SaveChanges();
2 更新实体时操作导航属性
用一个例子来说明在更新实体同时如何对导航属性进行操作吧。假设有两个类型
& public class Customer&
&&&&&&& public string ID { }
&&&&&&& public string Name { }&&&&&&&&
&&&&&&& public IList&CustomerAddress& CustomerAddresses { }
& public& class CustomerAddress
&&&&&& public string City { }&&&&&&
&&&&&& public string ZipCode { }
&&&&&& public string CustomerId { }&&&&&
&&&&&& public Customer Customer { }
那如何在更新Customer的同时Add一个CustomerAddress并且Delete一个CustomerAddress呢?关键一点就是要让EntityFramework的Change Tracker知道有CustomerAddress的存在,只需对Customer增加一个Add操作就行了,代码如下:
public void Modify(Customer entity,CustomerAddress address)
context.Customer.Add(entity);
//修改Customer
context.Entry(entity).State = EntityState.M
//新增CustomerAddress
if (......)
entity.CustomerAdresses.Add(address);
//删除CustomerAddress
if (.......)
context.Entry(address).State = EntityState.D
context.SaveChanges();
如果注释掉context.Customer.Add(entity)这行代码,将会抛出异常,这个是值得注意的地方。
3 实现实体的部分更新
以前好像在园子里有朋友讲过Entityframework实体部分更新的问题,就是用反射去遍历实体的属性,把需要修改的实体属性状态设置为Modified,这样也可以达到目的,但是这样写的代码有点多,而且对Entityframework的特性没有充分的利用,其实很简单两行代码就搞定:
/// &summary&
/// 实体部分更新
/// &/summary&
/// &param name=&originalEmployee&&需修改的实体&/param&
/// &param name=&newEmployee&&新的实体&/param&
public void Modify(Employee originalEmployee, Employee newEmployee)
context.Entry(originalEmployee).CurrentValues.SetValues(newEmployee);
context.SaveChanges();
关键是第一行代码,意思就是把原来实体的值设置为新实体的值,大家可以查看CurrentValues.SetValues()这个方法的源代码,就能明白其中的道理。在执行查询的时候大家 可以打开SQLServer Profiler查看是否真的是部分更新了。如果该实体是一个新实体,该如何更新呢?还是老办法让EntityFramework知道它的存在,把它的状态设置为UnChanged即可,综合两种情况,合并的代码如下:
public void Modify(Employee originalEmployee, Employee newEmployee)
if (context.Entry(originalEmployee).State != EntityState.Unchanged)
context.Entry(originalEmployee).State = EntityState.U
context.Entry(originalEmployee).CurrentValues.SetValues(newEmployee);
context.SaveChanges();
其实今天讲的都是new一新实体去更新数据库,关键是让EF 的Change Tracker跟踪新实体这样才能达到修改的目的,而这一切都是设置EntityState才行。
顺便提一下EntityState,它是一枚举类型,有Detached,Unchanged,Added,Deleted,Modified五个值分别代表:实体没被跟踪,啥操作对它无效;实体存在于数据库但还没被修改;实体被跟踪但不存在于数据库,实体存在于数据库并且标记为删除,SaveChanges操作将删除该实体;实体存在于数据库并且标记为修改,SaveChanges操作将修改该实体。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:613118次
积分:12971
积分:12971
排名:第739名
原创:222篇
转载:14篇
评论:2477条
(4)(4)(4)(11)(10)(4)(4)(4)(4)(4)(4)(3)(4)(4)(4)(4)(3)(4)(4)(4)(6)(4)(5)(4)(6)(4)(4)(3)(4)(4)(4)(5)(6)(8)(5)(4)(4)(8)(13)(7)(4)(12)(5)(8)(2)(3)(4)20704人阅读
android(57)
在使用ListView时 经常会遇到更新listview中的数据 并显示出来 再此介绍两个方法来解决这个问题:
1、在对listView进行适配的时候 使用simpleAdapter()的方法适配
& & &adapter = new SimpleAdapter(context, data, resource, from, to);要知道各个参数的含义 context是上下文 即存放listview的上下文,data是一个list&HashMaop&String,?&&类型的链表结构数据,resource是在layout设置listview中的每一个item的布局文件,from to 设置数据的对应关系的,from 是new String[]{
} 其中的数据时 HashMap&String,?&中的key &, to &--- new int[]{ }是对应的resource中的item布局的控件id 这两个存在对应关系,
例如:写一个方法 来获得返回对象 simpleadapter
// private SimpleAdapter getAdapter(){
// ArrayList&HashMap&String, Object&& list = new ArrayList&HashMap&String,Object&&();
// list = databaseService.getNumberinfos();
// SimpleAdapter adapter = new SimpleAdapter(CallSMSActivity.this, list,
// R.layout.item_listview, new String[]{DBInfo.TABLE.ID,DBInfo.TABLE.NUMBER}, new int[]{R.id.number_id,R.id.number_number});
图片中显示的表就是对应代码的listview &这个时从数据库中读取电话号码 右上角的imagebutton点击添加 添加后要更新显示
在adapter提供的方法有 notifyDataSetChanged()这个方法 但是在使用SimpleAdapter 和 ArrayAdapter的时候 这个方法无效
&我们可以 将 adapter = getAdapter(); listview.setAdapter(adapter);这两行代码放在数据变化时来执行 就可以更新数据显示了
另外:我们可以 在 activity中开启一个Handler &在数据变化时向handler发送信息 提示更新 handler.setEmptyMessage(what);
在handler.handMessage()中处理adapter = getAdapter(); listview.setAdapter(adapter);这两行代码
2、新写一个类 ListAdapter(名字随便) extends BaseAdapter{ & } 重写BaseAdapter中的方法&
例如:private class ListAdapter extends BaseAdapter{
public int getCount() {
// TODO Auto-generated method stub
return list.size();
public Object getItem(int position) {
// TODO Auto-generated method stub
public long getItemId(int position) {
// TODO Auto-generated method stub
public View getView(int position, View convertView, ViewGroup parent) {
HashMap&String, Object& map = new HashMap&String, Object&();
map = list.get(position);
View view = View.inflate(CallSMSActivity.this, R.layout.item_listview, null);
TextView number_id = (TextView) view.findViewById(R.id.number_id);
TextView number_number = (TextView) view.findViewById(R.id.number_number);
number_id.setText(map.get(DBInfo.TABLE.ID).toString().trim());
number_number.setText(map.get(DBInfo.TABLE.NUMBER).toString().trim());
当数据发生更新时 只需在数据更新出 重新获取list的数据 然后调用adapter.notifyDataSetChanged()方法就能更新数据,一定要对存储数据的链表更新不然数据时不会变化的
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:271163次
积分:4217
积分:4217
排名:第5551名
原创:164篇
转载:62篇
评论:33条
(4)(18)(32)(15)(10)(17)(8)(11)(11)(20)(18)(2)(4)(2)(1)(42)(10)(1)&最近考试,要复习计算机组成,这里把自己昨天晚复习的理解写一下。
第一台计算机书上说是1946年,不过我还是认为是Atanasoff在1939年发明的abc,对于cpu的发展,从1971年的4位的4004到今天的四核处理器,而且最主要的是在智能方面更加的突出,具体可以到官方网站()的这个网页浏览所有cpu的产品。
对于计算机的原理和内部的运行机制,cpu主要是有eu和biu这两个部分在80x86型cpu内。cpu还有保护模式和实地址模式还有虚拟模式,不过虚拟模式我看了是认为因为保护模式下运行实地址模式,所以可以理解虚拟8086模式为实地址模式的属性。对于计算机的软件而言,把软件的系统软件部分又有操作系统和数据库管理系统,系统结构层次分为微程序设计级,一般机器级,操作系统级,汇编语言级和高级语言级,不过对于微程序设计级不是太理解,后面网上找了资料,解释大概是用规整的(存储)逻辑来解释不规则的硬(接线)逻辑来实现计算机控制的技术。不过对于微指令内容还是要多学习,不过看了似乎要在现在的计算机用上仿真器才能运行用微指令写的程序。
在里面说到了对于LDT建议不要在os的内核中使用,我想也是有意义的,以后操作系统的很多方面都涉及这些,对于保护模式的描述比较多,是对于内存的在实地址模式下只能访问1M的寻址范围,而保护模式下可以充分利用cpu的地址线的优势实现多任务,4个特权检查机制,能保证代码和数据的安全和任务的隔离,又支持虚拟8086模式,可以对8086的支持,GDT是保护模式必须的数据结构也是唯一的,不可能多个,又说可以创建类似的LDT,不过可能2个只能存在一个吧,GDTR寄存器和LGDT指令用于GDT,LDTR和LLDT用于LDT,不过一个是32位一个是16位的选择子,一个是有入口地址和16位的GDTlimit,一个是段描述符在GDT中的索引值。
在eu中有通用寄存器和操作寄存器还有ALU还有标志寄存器,在BIU中有段寄存器,地址形成与总线控制,还有指令队列,biu根据eu请求,完成cpu与存储器或io设备的数据传送,由于eu提供的是16位的存储地址,而8086需要1M需要20位地址,所以biu设立了4个寄存器(cs,ds,es,ss),其中biu中ip总是存着下一次将从主存中取出指令的偏移地址。
先写到这里。
阅读(...) 评论()问题补充&&
本页链接:
猜你感兴趣

我要回帖

更多关于 设备基础二次灌浆 的文章

 

随机推荐