具有多个edmx的实体框架

pdi*_*ddy 8 .net c# entity-framework unit-of-work

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

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

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

Ada*_*son 7

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

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

        hr.SaveChanges();
    }

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

        inv.SaveChanges();
    }

    trans.Complete();
}
Run Code Online (Sandbox Code Playgroud)

显然你可以重新安排你喜欢的上下文对象(例如,如果你需要同时使用它们),你可以将事务隔离级别改为适当的,但是这应该给你需要知道的内容.为了使您的数据库更改为原子.