小编Joe*_*ell的帖子

EF6中的嵌套事务行为

我目前正在使用TransactionScope来管理我的数据层中的事务,但我一直遇到嵌套事务和异步的问题,在嵌套事务期间连接似乎关闭或者事务被提升为MSDTC.我没有找到确切的问题,但在阅读之后看起来这个场景并没有得到特别好的支持,我应该使用Database.BeginTransaction()代替.

我的问题是我无法找到有关Database.BeginTransaction()如何与嵌套事务一起工作的信息,特别是在我想要使用环境事务而不是创建新事务的场景中.我怀疑它并不打算以这种方式工作,如果我想管理嵌套事务,我应该抽象出事务管理来给我更多控制权.

我不想添加不必要的抽象层,我想知道是否有人有这方面的经验,并且可以在嵌套在另一个事务中时确认Database.BeginTransaction()的行为?

有关我的DAL的其他信息:基于CQS模式,我倾向于在命令或查询处理程序中封装Db相关代码,因此这种嵌套如何发生的简化/设计示例将是:

public class AddBlogPostHandler
{
    private readonly MyDbContext _myDbContext;

    public AddBlogPostHandler(MyDbContext myDbContext)
    {
        _myDbContext = myDbContext;
    }

    public async Task ExecuteAsync(AddBlogPostCommand command)
    {
        using (var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
        {
            // .. code to create and add a draft blog post to the context
            await _myDbContext.SaveChangesAsync();

            var publishBlogPostCommand = new PublishBlogPostCommand();
            // ..set some variables on the PublishBlogPostCommand
            await PublishBlogPostAsync(command);

            scope.Complete();
        }
    }
}

public class PublishBlogPostHandler
{
    private readonly MyDbContext _myDbContext;

    public PublishBlogPostHandler(MyDbContext myDbContext) …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework transactions entity-framework-6

12
推荐指数
1
解决办法
6094
查看次数

Db设计用于数据更新批准

我正在开发一个项目,我们需要让某些用户输入或更新的数据在添加到"实时数据"之前处于挂起状态.

在准备数据的同时,用户可以保存不完整的记录.虽然数据处于待处理状态,但我们不希望数据影响对编辑实时数据的用户施加的规则,例如,当输入已存在的相同数据时,处理实时数据的用户不应该遇到唯一的约束.待处理状态.

我设想将数据更新集合分组为"数据提交",当有人质量控制提交时,数据将被重新验证并更正/拒绝/批准.

我考虑了两种关于存储数据的方案:

1)将待处理状态数据保存在与实时数据相同的表中,但添加一个标志以指示其状态.我可以在这里看到问题,必须删除约束或使必需字段可以为空以支持"不完整"状态数据.然后是如何处理更新现有数据的问题,您必须为更新添加新行并将其链接回现有的"实时"行.这对我来说似乎有些混乱.

2)添加镜像活动表的新表并将数据存储在那里直到它被批准.这将允许我完全控制现有的活动表,而"待定"表可以被用户认为他想放在那里的任何东西滥用.这样做的缺点是我最终会在数据库中添加许多额外的表/ SP.我想到的另一个问题是用户如何在两条记录之间进行链接,其中链接的记录可能是活动表中的记录,也可能是挂起表中的记录,但我想在这种情况下你总是可以获取一份链接记录并将其视为更新?

这两种解决方案似乎都不完美,但第二种解决方案似乎对我来说是更好的选择 - 是否有第三种解决方案?

sql architecture sql-server database-design

10
推荐指数
1
解决办法
2538
查看次数

Azure网站上的RavenDb - 拒绝访问

我正在使用Azure上的新网站功能,并尝试在嵌入模式下使用RavenDB运行MVC网站.一切都在本地工作正常但在azure中运行已部署的站点我收到此错误:

System.Net.NetworkInformation.NetworkInformationException:拒绝访问

当我在global.asax中创建数据库实例时会发生这种情况:

Store = EmbeddableDocumentStore { ConnectionStringName = "RavenDb" };
Run Code Online (Sandbox Code Playgroud)

我的连接字符串是:

<add name="RavenDb" connectionString="DataDir=~\App_Data\Raven" />
Run Code Online (Sandbox Code Playgroud)

谢谢!

azure ravendb asp.net-mvc-3 azure-web-sites

6
推荐指数
1
解决办法
1416
查看次数