qua*_*els 6 asp.net asp.net-mvc ado.net ado.net-entity-data-model
我刚刚完成了在这里找到的MvcMusicStore教程.这是一个包含工作源代码的优秀教程.到目前为止,我最喜欢的MVC v2教程之一.
该教程是我第一次使用ADO.NET实体框架的介绍,我必须承认,其中大部分都非常快速和直接.但是,我担心可维护性.当客户向其网站请求需要新字段,表格和关系的其他功能时,此框架的可自定义性如何?
我非常担心无法有效执行客户的变更单,因为实体模型基本上是拖放式的,计算机生成的代码.我使用代码生成器的经验并不好.如果模型的内容出现问题,我就无法将humpty-dumpty重新组合在一起怎么办?
从长远来看,我想知道使用人类可以阅读和编辑的手型模型是否比使用实体框架更有效.
有没有人在实体框架上工作得足以说他们在一个非常流畅的开发环境中使用它很舒服?
我在当前项目中使用实体框架(V1.0)大约一年.我们有100个表,都添加到edmx中.我们面临的问题(虽然不确定新实体框架是否解决了这些问题)
当您习惯VS.net IDE时,您将习惯从IDE执行所有拖放操作.问题是,一旦你的edmx托管了100个表,IDE就会停顿,你必须等待3-4分钟才能响应
如此多的表格,您在edmx上进行的任何编辑都需要很长时间.
当您打算使用版本控件时,比较10000行XML非常痛苦.考虑合并2个分支,每个分支具有10000行edmx,表,表之间的新关联,删除的关联以及来回比较xmls.如果您认真考虑合并2个大的edmx文件,则需要一个好的xml比较工具
出于性能原因,我们必须将csdl,msl和ssdl作为嵌入式资源
您的edmx必须始终与您的数据库同步,或者至少,当您尝试更新edmx时,它会尝试同步,并且如果它们不同步可能会引发一些模糊的错误.
我们在使用EF时可能会考虑的事情
通过使用1 edmx将多个edmx用于逻辑分组/链接在一起的表.请注意,如果这样做,每个edmx都应该位于自己的命名空间中.如果您尝试在同一名称空间中将2个相关表(例如人和地址)添加到2 edmx,则会收到编译器错误,指出已定义外键关系.(提示:创建一个文件夹并在此文件夹下创建edmx.如果您尝试在没有该文件夹的情况下更改edmx中的命名空间,则下次打开/编辑它时无法正确保存命名空间)
fewer tables in edmx => less heavy
container => good
Run Code Online (Sandbox Code Playgroud)
edmx中的表更少=>合并2个分支时更容易合并
请注意对象上下文不是线程安全的事实
您的存储库(或您使用的DAO)应负责创建和处理它创建的容器.使用DI框架,特别是在Web应用程序中为我们复杂化的东西.Web请求是从线程池提供的,并且在提供Web请求后未正确处理容器,因为线程本身未被处理.容器被重用(当线程被重用时)并产生了很多并发问题
不要相信你的VS IDE.获得一个好的XML编辑器并知道如何编辑edmx文件(尽管您不需要编辑设计器).弄脏你的手
在执行查询时,始终总是(完全不能强调这一点)运行SQL分析器(我的意思是代码的每一步).尽管查询看起来很复杂,但您会惊讶地发现您点击数据库的次数示例:(抱歉,无法将代码转换为正确的格式,有人可以格式化吗?)
var myOrders = from t in context.Table where t.CustomerID=123
Run Code Online (Sandbox Code Playgroud)
选择t; //上面的查询尚未执行
if(myOrders.Count>0)//DB query to
find count {
var firstOrder = myOrders.First()//DB query to get
first result
}
更好的方法
//查询具体化,只有1次命中DB,因为我们使用ToList()var myOrders =(来自于Context.tables中的t,其中t.customerID = 123选择t).ToList();
if(myOrders.Count>0)//no DB hit
{
//do something
var myOrder = myOrders[0];//no DB hit
}
Run Code Online (Sandbox Code Playgroud)知道何时使用跟踪和无跟踪(对于只读)和Web应用程序执行大量读取而不是写入.初始化容器时正确设置它们
我忘了编译的查询吗?看看 这里为更多的好东西
从数据库中获取1000行时,请确保使用IQueryable并分离objectContext,以免内存不足
更新:
Julie Lerman用类似的解决方案解决了同样的问题.她的帖子还指出沃德在处理大量桌子方面的工作
| 归档时间: |
|
| 查看次数: |
509 次 |
| 最近记录: |