【问题标题】:Entity Framework with multiple edmx具有多个 edmx 的实体框架
【发布时间】:2010-09-15 13:22:16
【问题描述】:

假设我的数据库中有多个数据库架构,例如:HumanRessources 和 Inventory。

在每个架构中都包含多个表。您通常会将您的数据库拆分为多个 edmx,还是通常将所有内容都放在一个 edmx 中?

我正在考虑为每个模式创建一个 edmx,但想知道这将如何影响 unitorwork 模式。阅读一些文章,ObjectContext 将成为工作单元。通过定义 2 个 edmx,我将得到 2 个 ObjectContext:HumanRessourceContext 和 InventoryContext,这意味着每个都是一个工作单元。如果我希望对人力资源中的实体和库存上下文中的实体进行的所有修改都是原子的,这可以通过工作单元模式实现吗?

【问题讨论】:

标签: c# .net entity-framework unit-of-work


【解决方案1】:

虽然这并不是将数据库按架构拆分为 EDMX 的认可,但您可以使用 TransactionScope 使更新成为原子更新:

using(TransactionScope trans = new TransactionScope())
{
    using(HumanResources hr = new HumanResources())
    {
        //...

        hr.SaveChanges();
    }

    using(Inventory inv = new Inventory())
    {
        //...

        inv.SaveChanges();
    }

    trans.Complete();
}

显然,您可以根据自己的喜好重新排列上下文对象(例如,如果您需要同时使用它们)并且您可以将事务隔离级别更改为合适的级别,但这应该可以满足您的需求了解以使您的数据库更改原子化。

【讨论】:

  • 好的,谢谢,我试图避开事务范围。所以几乎唯一的方法是拥有一个包含人力资源和库存元素的单个 edmx,这样工作单元模式就可以正常工作。
  • @pdiddy:你为什么要避免 TransactionScope?
  • 我对 UnitOfWork 模式的印象是我可以避免事务范围,因为在调用 savechanges 时,在对象上完成的所有事情都将在一个签名事务中发送。所以我开始想知道我是否有 2 个上下文,unitofwork 模式将如何工作,但我发现我必须使用事务范围来使 2 个上下文原子化,这是有意义的。我是这种工作单元模式的新手,所以我只是想理解它。
【解决方案2】:

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

【讨论】:

  • 更多的是关于结构,是否将其组织在我的项目中...将所有内容都放在一个 edmx 中,假设我有 50 张桌子...在一个 edmx 中.. 它有点重只是在设计器中打开它可能会令人困惑,因为有太多....但是如果它会给我带来问题,那么我宁愿拥有一个单一的 edmx。谢谢
猜你喜欢
  • 2011-10-05
  • 1970-01-01
  • 2016-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-06
  • 1970-01-01
相关资源
最近更新 更多