今天学习的目标换成了 asp.net mvc 模式
半年之前有学习了解过 asp.net mvc 本来以为这次会很轻松。
但是实际上还是非常的混乱。 今天在网上找了一套源码来研究。
开始到最后报错。找不到.netframework data previder的请求。
当然,根据网上的三种方法。
1.直接下载安装
失败
2.将ef的server文件放到Bin之下
失败
3.更改config文件
失败
这个问题纠结了我一个晚上,但是还没得到解决方法。
但是我对ef的使用产生了困惑。决定来写一个Demo继续感知。
以下是我在https://www.cnblogs.com/caoyc/p/5821639.html中找到的部分有用的地方
在EF中实体的五种状态:
1、detached:实体不在上下文的追踪范围内。如刚new的实例处于detached,可以通过Attach()添加到上下文,此时的状态是unchanged。
2、unchanged:未改变,如刚从数据库读出来的实例
3、added:添加状态 一般执行 db.Set.Add(t)/ AddRange(ts)时标记为added。因为新对象在数据库中没有相应的记录,所有不能转成deleted和modified状态。
4、deleted:删除状态 一般执行 db.Set.Remove(t)/ RemoveRange(ts)时标记为deleted。数据库中必须先有了相应的记录,所有deleted不能转为added状态。
5、modified:修改状态 改变了实体的属性处于这个状态,可以转为deleted,不能转为added状态。
当EF从数据库中提取一条记录生成一个实体对象之后,应用程序可以针对它的操作太多了,EF是怎么知道哪个对象处于哪个状态的?
EF的解决方案是:为当前所有需要跟踪的实体对象,创建一个相应的DbEntityEntry对象,此对象包容着实体对象每个属性的三个值:Current Value、Original Value和Database Value,只要比较这三个值,很容易地就知道哪个属性值被修改了(设置:context.Configuration.AutoDetectChangesEnabled = false则不会去追踪,默认是打开的),从而生成相应的Sql命令。对象的状态会随着操作而改变,我们也可以自己指定状态
以及代码
2 DbEntityEntry userEntry = context.Entry(user);
3 userEntry.State = EntityState.Added;//添加标记
4 userEntry.State = EntityState.Deleted;//删除标记
5 userEntry.State = EntityState.Modified;//修改标记
6 userEntry.State = EntityState.Unchanged;//无变化标记
7 userEntry.State = EntityState.Detached;//不追踪标记
感觉到有点东西了,我的本地数据库也快要装好了。可以开始了。
借鉴了一下https://blog.csdn.net/qq_33459121/article/details/81559793中的Demo
意识到我一直弄不明白的数据库库连接可以只用用localdb然后通过里面的字符串拷贝即可。
今天geigei 全都白费 。