小编Sea*_*ron的帖子

实体框架6数据库优先和洋葱架构

我首先使用Entity Framework 6数据库.我正在转换该项目以实施洋葱架构,以便更好地分离关注点.我阅读了很多文章并观看了很多视频,但在决定我的解决方案结构时遇到了一些问题.

我有4个项目:核心,基础设施,网络和测试.

根据我的了解,.edmx文件应放在我的"Infrastructure"文件夹下.但是,我还阅读了有关使用Repository和Unit of Work模式来帮助EF解耦和使用依赖注入的信息.

有了这个说:

  • 我是否必须在CORE下为模型中的所有实体创建存储库接口?如果是这样,如何在庞大的数据库中维护这个?我已经研究过自动播放器,但发现了IEnumererables与IQueryables有关的问题,但有一个扩展可用它必须与此一起发布.我可以更深入地尝试这条路线但是想先听一听.

  • 作为替代方案,我应该将我的edmx保留在Infrastructure中并将我的实体的.tt T4文件移动到CORE吗?这是否存在紧密耦合或良好的解决方案?

  • 通用存储库界面是否适用于您提供的建议?或者EF6已经解决了Repository和UoW模式问题?

感谢您查看我的问题,并提出任何其他回复.

我在这里发现了一个类似的帖子没有回答: EF6和Onion架构 - 数据库优先,没有Repository模式

entity-framework separation-of-concerns n-tier-architecture automapper onion-architecture

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

使用async/await设置Thread.CurrentPrincipal

下面是我试图在异步方法中将Thread.CurrentPrincipal设置为自定义UserPrincipal对象的简化版本,但是自定义对象在离开await后会丢失,即使它仍然在新的threadID 10上.

有没有办法在await中更改Thread.CurrentPrincipal并在以后使用它而不传入或返回它?或者这不安全,永远不应该异步?我知道有线程更改,但认为async/await将为我处理同步.

[TestMethod]
public async Task AsyncTest()
{
    var principalType = Thread.CurrentPrincipal.GetType().Name;
    // principalType = WindowsPrincipal
    // Thread.CurrentThread.ManagedThreadId = 11

    await Task.Run(() =>
    {
        // Tried putting await Task.Yield() here but didn't help

        Thread.CurrentPrincipal = new UserPrincipal(Thread.CurrentPrincipal.Identity);
        principalType = Thread.CurrentPrincipal.GetType().Name;
        // principalType = UserPrincipal
        // Thread.CurrentThread.ManagedThreadId = 10
    });
    principalType = Thread.CurrentPrincipal.GetType().Name;
    // principalType = WindowsPrincipal (WHY??)
    // Thread.CurrentThread.ManagedThreadId = 10
}
Run Code Online (Sandbox Code Playgroud)

c# asynchronous claims-based-identity async-await current-principal

9
推荐指数
4
解决办法
6470
查看次数

ASP.NET 5 beta 7的共享类库参考

在我们当前的环境中,我们有一些共享的公共库(C#类库.NET 4.5.1 csproj)项目,它们都被asp.net和控制台应用程序引用.我们正在考虑将我们的一个Web项目升级到ASP.NET 5,以开始测试一些新的更改.

由于我无法在ASP.NET 5中对旧的csproj库类型进行项目引用,因此我必须通过它编译的DLL引用该库并从project.json中删除dnxcore50(这对我们来说很好).但是,我们拥有共享库源并不断降低DEV环境中的更新,以便对DLL进行修改和更改.ASP.NET 5将DLL放在lib目录中,并且不使用csproj目录的路径.

如果您有asp.net和控制台csproj应用程序以及需要共享公共代码库而不必维护2个代码库的asp.net 5应用程序,您会怎么做?您是否会建议编译公共库项目并在编译asp.net 5项目之前替换lib中的引用DLL,或者为我们的共享库设置本地nuget repo,因为项目引用现在对csproj来说是不可能的?我们是TFS中所有这些代码的共享团队,所以无论我做什么都需要为其他人轻松复制.

visual-studio-2015 asp.net-core

7
推荐指数
1
解决办法
413
查看次数