none
对Entity Framework的疑问——应该实例化几个Entity Container RRS feed

  • 问题

  • 最近在用Entity Framework开发项目
    一直有一个这样的疑问
    就是对一个项目而言到底应该实例化几个Entity Container
    例如 Entity Framework生成的 Entity Container 为 TestEntity
    其包含了 User
    我们如果要访问User
    就应该
    TestEntity _db=new TestEntity();
    var users=(from u in _db.User
              select u).ToList();
    就ORM而言 整个项目的数据应该保持统一
    那么 就应该只实例化 一个TestEntity 所有的数据操作都在这个对象下进行
    我目前使用的是Singleton模式
    但是这样做不知道会不会造成数据库连接无法及时释放、大数据量(经常单表数据在100W以上)时服务器性能下降甚至崩溃的问题

    如果实例化多个TestEntity的对象 又会造成不同对象中的数据不一致的问题
    不知道大家是否有相同的疑问
    你们在实际应用中都是怎么处理的
    2009年6月21日 7:23

答案

  • 你好,

    抱歉我误解你的意思了。我以为你是要这么做:
    using(TestEntity _db=new TestEntity())
    {
    //...
      using(TestEntity _db2=new TestEntity())
    {
    //...
    }
    }

    其实这个就跟使用SqlConnection是一样的,用完就dispose掉来关闭连接。你说的数据不一致的问题是什么意思呢?如果是同步更新的问题可以参考:

    http://msdn.microsoft.com/en-us/library/bb399228(VS.100).aspx


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    2009年6月24日 6:21
    版主
  • 我记得在MSDN上说过不要在一个程序范围内共享使用同一个TestEntity~而且一个DataContext下的修改会被跟踪并在SaveChanges时以事务方式提交~如果整个程序都使用一个DataContext似乎会出现很多混乱~
    并发问题可以对实体属性设置并发模式~
    宠辱不惊,看庭前花开花落。去留无意,望天上云卷云舒。
    2009年6月24日 9:32
    版主

全部回复

  • 你好,
    一般来说除非有特殊需要,创建一个就可以了。如果你遇到你所说的性能上的问题欢迎来论坛上提问。
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    2009年6月23日 1:49
    版主
  • 谢谢回复
    但是我在很多微软的Sample里面看到
    他们基本上都用
    using(TestEntity _db=new TestEntity())
    {
        ......
    }
    这样的代码来进行数据库访问
    也就是说基本上在需要读取数据的时候
    才建立一个Entity Container的实例
    很费解呀
    2009年6月23日 15:11
  • 你好,

    抱歉我误解你的意思了。我以为你是要这么做:
    using(TestEntity _db=new TestEntity())
    {
    //...
      using(TestEntity _db2=new TestEntity())
    {
    //...
    }
    }

    其实这个就跟使用SqlConnection是一样的,用完就dispose掉来关闭连接。你说的数据不一致的问题是什么意思呢?如果是同步更新的问题可以参考:

    http://msdn.microsoft.com/en-us/library/bb399228(VS.100).aspx


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    2009年6月24日 6:21
    版主
  • 我记得在MSDN上说过不要在一个程序范围内共享使用同一个TestEntity~而且一个DataContext下的修改会被跟踪并在SaveChanges时以事务方式提交~如果整个程序都使用一个DataContext似乎会出现很多混乱~
    并发问题可以对实体属性设置并发模式~
    宠辱不惊,看庭前花开花落。去留无意,望天上云卷云舒。
    2009年6月24日 9:32
    版主
  • 谢谢两位版主的回复
    2009年6月25日 1:13