8

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

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

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

4

2 回答 2

7

虽然这并不是对按模式将数据库拆分为 EDMX 的认可,但您可以使用以下命令使更新原子化TransactionScope

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

        hr.SaveChanges();
    }

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

        inv.SaveChanges();
    }

    trans.Complete();
}

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

于 2010-09-15T13:28:05.477 回答
2

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

于 2010-09-15T13:32:48.570 回答