gpt4 book ai didi

asp.net - 在编写自定义和不断更新的网站时,ADO.NET Entity Framework (带有 ASP.NET MVC v2)是一个可行的选择吗?

转载 作者:行者123 更新时间:2023-12-04 14:06:48 25 4
gpt4 key购买 nike

我刚刚完成了 MvcMusicStore 教程 found here .这是一个带有工作源代码的优秀教程。迄今为止我最喜欢的 MVC v2 教程之一。

该教程是我第一次介绍使用 ADO.NET Entity Framework,我必须承认其中大部分内容非常快速和直接。但是,我担心可维护性。当客户向其站点请求需要新字段、表和关系的附加功能时,该框架的可定制性如何?

我非常担心无法有效地执行客户的变更单,因为实体模型基本上是拖放式的计算机生成代码。我在代码生成器方面的经验并不好。如果模型的内脏出现问题并且我无法将矮胖的东西放回原处怎么办?

从长远来看,我想知道使用人类可以阅读和编辑的手写模型是否比使用 Entity Framework 更有效。

有没有人在 Entity Framework 方面工作得足够多,可以说他们在非常流畅的开发环境中使用它很舒服?

最佳答案

我在当前项目中使用 Entity Framework (V1.0)大约一年了。我们有 100 个表,都添加到 edmx 中。
我们面临的问题(虽然不确定新的 Entity Framework 是否解决了这些问题)

  • 当你习惯了 VS.net IDE 时,你
    将习惯于做所有的拖/放
    从您的 IDE 操作。这
    问题是,一旦您的 edmx 主机
    100多张表,IDE真的卡住了
    你将不得不等待 3-4
    在它变得响应之前几分钟
  • 有这么多表,任何编辑你
    在 edmx 上做需要很长时间。
  • 当您打算使用某个版本时
    控件,比较 10000 行 XML 是
    相当痛苦。考虑合并2
    每个分支都有 10000 行
    edmx,表格,新关联
    表之间,删除的关联
    并来回比较
    xmls。你需要一个好的 xml
    比较工具,如果你是认真的
    关于合并 2 个大 edmx 文件
  • 出于性能原因,我们不得不
    将 csdl、msl 和 ssdl 设为
    嵌入式资源
  • 您的 edmx 必须同步
    一直与您的数据库,或在
    至少,当您尝试更新
    edmx,它会尝试同步并可能
    抛出一些模糊的错误,如果他们
    不同步。
  • 请注意,您的
    实体(表/ View )应该总是
    有一个主键,否则你会
    得到模糊的错误。看我的 otherquestion here

  • 将来使用 EF 时我们做过/我可能会考虑的事情
  • 通过使用 1 个 edmx 使用多个 edmx
    对于逻辑分组/链接的表
    一起。请注意以下事实
    如果你这样做,每个 edmx 应该
    生活在它自己的命名空间中。如果你
    尝试添加 2 个相关表(比如
    人员和地址)到 2 edmx 在
    相同的命名空间,你会得到一个
    编译器错误指出
    外键关系已经
    定义。 (提示:创建一个文件夹并
    在此文件夹下创建 edmx。
    如果您尝试更改 namespace
    没有文件夹的 edmx,
    它没有正确保存
    下次你的命名空间
    打开/编辑它)
    fewer tables in edmx => less heavy
    container => good

    edmx 中的表更少=> 更容易
    合并 2 个分支时合并
  • 意识到对象
    上下文不是线程安全的
  • 您的存储库(或您使用的任何 DAO)应该负责创建和处置它创建的容器。使用 DI 框架,尤其是在 Web 应用程序中对我们来说复杂的事情。 Web 请求是从线程池提供的,并且在 Web 请求被提供后容器没有被正确处理,因为线程本身没有被处理。容器被重用(当线程被重用时)并产生了很多并发问题
  • 不要相信你的 VS IDE。得到一个好
    XML 编辑器并知道如何编辑
    edmx 文件(虽然你不需要
    编辑设计器)。弄脏你的手
  • 永远永远永远 (只是不能足够强调这一点)运行一个
    SQL 探查器(我的意思是每个和
    你代码的每一步)当你
    执行您的查询。复杂如
    查询可能看起来,你会
    惊讶地发现你有多少次
    点击数据库示例:(对不起,无法
    获取正确格式的代码,可以
    有人格式化吗?)
    var myOrders = from t in context.Table where t.CustomerID=123

    选择 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
    }
  • 知道何时使用跟踪而不是
    跟踪(只读)和网络应用程序
    读取比写入多。放
    初始化时正确
    您的容器
  • 我忘记编译查询了吗?看
    here更多好东西
  • 当从 1000 行返回时
    你的数据库,确保你使用 IQueryable 和 detach theobjectContext这样你就不会
    内存不足

  • 更新:

    Julie Lermansimilar solution 解决同样的问题.她的帖子还指向 Ward的工作处理 huge number of tables

    关于asp.net - 在编写自定义和不断更新的网站时,ADO.NET Entity Framework (带有 ASP.NET MVC v2)是一个可行的选择吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3112516/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com