代码之家  ›  专栏  ›  技术社区  ›  pdiddy

具有多个EDMX的实体框架

  •  8
  • pdiddy  · 技术社区  · 14 年前

    假设我在数据库中有多个数据库模式,例如:人力资源和库存。

    在每个模式中都包含多个表。您通常是将数据库拆分为多个EDMX,还是只将所有内容放在一个EDMX中?

    我在考虑为每个模式创建一个EDMX,但是想知道这将如何影响UnitorWork模式。通过阅读一些文章,ObjectContext将成为UnitofWork。通过定义2个edmx,我将得到2个objectcontext:humanressourcecontext和inventorycontext,这意味着每个都将是一个工作单元。如果我希望对人力资源中的一个实体和InventoryContext中的一个实体所做的所有修改都是原子的,那么这可以通过UnitOfWork模式实现吗?

    2 回复  |  直到 14 年前
        1
  •  7
  •   Adam Robinson    14 年前

    虽然这不是同意将数据库按模式拆分为EDMX,但您可以使用 TransactionScope :

    using(TransactionScope trans = new TransactionScope())
    {
        using(HumanResources hr = new HumanResources())
        {
            //...
    
            hr.SaveChanges();
        }
    
        using(Inventory inv = new Inventory())
        {
            //...
    
            inv.SaveChanges();
        }
    
        trans.Complete();
    }
    

    显然,您可以根据自己的喜好重新排列上下文对象(例如,如果您需要同时使用这两个对象),并且可以将事务隔离级别更改为适当的级别,但这应该为您提供所需的知识,以便使数据库更改成为原子的。

        2
  •  2
  •   Dave Swersky    14 年前

    如果您的库存和人力资源表之间没有任何关系,那么将这些表拆分为两个EDMX文件是可以的,尽管我不知道它会带来什么好处。如果他们确实有直接或间接的关系,那么在尝试使用这些关系时会遇到问题。最简单的解决方案是使用单个EDM。