具有多个edmx的实体框架

时间:2010-09-15 13:22:17

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

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

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

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

2 个答案:

答案 0 :(得分:7)

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

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

        hr.SaveChanges();
    }

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

        inv.SaveChanges();
    }

    trans.Complete();
}

显然你可以重新安排你喜欢的上下文对象(例如,如果你需要同时使用它们),你可以将事务隔离级别改为适当的,但这应该可以满足你的需要要知道为了使你的数据库发生原子变化。

答案 1 :(得分:2)

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