小编bin*_*nks的帖子

过滤包括LINQ和实体框架中的项目

我目前在我的应用程序中有这个LINQ/EF代码:

var rootCategoryItem = DatabaseContext.Categories
                            .Include("SubCategories")
                            .OrderBy(c => c.CategoryOrder)
                            .Single(c => c.CategoryId == 1);
Run Code Online (Sandbox Code Playgroud)

我知道在EF你不能过滤器中包含的项目着呢,我可以写一些代码LINQ过滤掉不需要的子类别...但LINQ代码将被转换成一个可怕的SQL是高度未优化.我也可以编写一个执行此操作的存储过程(并编写比LINQ更好的查询),但我真的想使用纯EF.

所以我留下了两个选项(除非有人可以看到其他选项).

第一个是遍历子类别,删除不需要的子类别:

        var subCategoriesToFilter = rootCategoryItem.SubCategories.ToList();

        for (int i = 0; i < subCategoriesToFilter.Count; i++)
        {
            if (subCategoriesToFilter[i].Deleted)
                rootCategoryItem.SubCategories.Remove(subCategoriesToFilter[i]);
        }
Run Code Online (Sandbox Code Playgroud)

第二种选择是在我看来:

<ul class="treeview ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion ui-widget ui-sortable ui-accordion-content-active">
@foreach (var categoryitem in Model.SubCategories.OrderBy(c => c.CategoryOrder))
{

    @if(!Model.Deleted)
    { 
        <li class="treelistitem" id="@Model.CategoryId">
            <div class="ui-accordion-header ui-state-default ui-corner-all ui-accordion-icons ui-sortable-handle first">
            <span class="clickable">
                <span class="ui-accordion-header-icon ui-icon treeviewicon treeviewplus"></span>
                <i class="glyphicon glyphicon-folder-open rightfolderpadding"></i><span class="categoryname">@Model.CategoryName</span>
            </span>
            </div> …
Run Code Online (Sandbox Code Playgroud)

c# linq entity-framework

16
推荐指数
1
解决办法
2万
查看次数

重新分叉GitHub上的存储库

我已经在GitHub上创建了一个存储库,并拥有相当广泛的commit / pull / push历史记录,我需要保留该历史记录。

主存储库的所有者创建了一些新分支。如何将这些分支克隆到叉状副本中,而又不删除分叉并从头进行克隆?

github github-for-windows

5
推荐指数
1
解决办法
4732
查看次数

是否应该为依赖注入许多"级别"而不是需要它?

我正在使用SOLID原则编写C#ASP.NET MVC Web应用程序.

我写了一个ViewModelService,这取决于a AccountService和a RepositoryService,所以我已经注入了这两个服务ViewModelServer.

PermissionService依赖于HttpContextBase以使用GetOwinContext()获得的一个实例UserManager.控制器有一个HttpContextBase需要使用的实例- 所以我似乎必须将HttpContextBase实例注入到ViewModelService然后将其注入到实例中PermissionService.

所以,就代码而言,我有:

public ViewModelService

public CategoryRepository(ApplicationDbContext context, IPermissionService permissionservice)

public AccountService(HttpContextBase httpcontext, IPrincipal securityprincipal)
Run Code Online (Sandbox Code Playgroud)

为了实例化ViewModelService,我接着这样做:

new ViewModelService(
    new CategoryRepository(
            new ApplicationDbContext(), 
            new PermissionService(
                new AccountService(HttpContext, Thread.CurrentPrincipal),
                new UserPasswordRepository(new ApplicationDbContext()),
                new ApplicationSettingsService())),
    new PasswordRepository(
            new ApplicationDbContext(), 
            new PermissionService(
                new AccountService(HttpContext, Thread.CurrentPrincipal), 
                new UserPasswordRepository(new ApplicationDbContext()),
                new ApplicationSettingsService())),
    new ModelValidatorService());
Run Code Online (Sandbox Code Playgroud)

应该从多个"级别"注入依赖关系,还是有更好的方法?

c# dependency-injection

5
推荐指数
1
解决办法
684
查看次数

接收 SignalR 回调的奇怪延迟

我遇到一个奇怪的问题,其中使用 SignalR 发送到多个客户端的回调对于某些客户端来说会延迟。

在此输入图像描述

正如您所看到的,客户端 A 接收回调和客户端 B 接收回调之间有整整 7 秒的延迟。

有一个“主”客户端在计时器结束时执行调用:

                    vm.bettingconnection
                    .invoke("MoveToNextRound", gameId)
                    .catch(function (err) {
                        return console.error(err.toString());
                    });
Run Code Online (Sandbox Code Playgroud)

“vm”是一个 VueJS 对象

var vm = new Vue({
el: '#gamesquares',

data: function () {
    return {
        rawgamedata: [],
        connection: "",
        bettingconnection: "",
        scorepredictShow: true,
        boardShow: false,
        timerShow: false,
        expectationShow: false,
        restseconds: 0,
        roundseconds: 0,
        restsecondsleft: 0,
        roundsecondsleft: 0,
        roundsleft: 0,
        currentround: 0,
        gamemode: 0,
        estimatedpoints: 0,
        scoreindex: 0,
        currentscore: 0,
        targetscore: 0
    };
},
Run Code Online (Sandbox Code Playgroud)

被调用的端点的逻辑非常简单:

        public async Task MoveToNextRound(Guid gameId) …
Run Code Online (Sandbox Code Playgroud)

c# signalr signalr-hub signalr.client .net-core

5
推荐指数
1
解决办法
249
查看次数

如何正确进行单元测试

我正在尝试使用测试驱动设计方法编写一个应用程序 - 我对单元测试相当陌生,所以我只是想知道测试正确输入和异常的正确方法是什么。

我有一个用于加载配置文件的类:

class Config
{
    private XmlDocument configfile;

    public Config()
    {
        configfile = new XmlDocument();
    }

    public void LoadConfigFile(string filename)
    {
        if(string.IsNullOrEmpty(filename)) 
            throw new System.ArgumentException("You must specify a filename");

        try
        {
            configfile.Load(filename);
        }
        catch (Exception ex)
        {
            throw new System.IO.FileNotFoundException("File could not be loaded");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,这里可以执行 3 个测试:

  1. 加载实际文件并确保没有错误
  2. 尝试加载无效文件(不存在的文件)
  3. 不指定文件名参数

测试这些的正确方法是编写 3 个测试方法,如下所示:

    /// <summary>
    ///A test for LoadConfigFile
    ///</summary>
    [TestMethod()]
    public void LoadConfigFileTest()
    {
        Config target = new Config(); // TODO: Initialize to an …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing

3
推荐指数
1
解决办法
256
查看次数

使用 InternalsVisibleTo 测试私有成员

我有以下代码,我正在尝试进行单元测试:

class ConfigFile
{

    private XmlDocument configData;

    public ConfigFile()
    {
        configData = new XmlDocument();
    }

    public void loadConfigFile(string filename) 
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

loadConfigFile 方法无效,因此我需要检查 configData 字段以验证其中的数据是否正确。为此,我尝试使用 InternalsVisibleTo 属性 - 我已经签署了单元测试 DLL,并生成了公钥,所以我现在拥有:

    [assembly: InternalsVisibleTo("ConfigTests, PublicKey=<PUBLICKEYVALUE>")]
    private XmlDocument configData;
Run Code Online (Sandbox Code Playgroud)

单元测试仍然不想访问私有字段:

    [TestMethod()]
    public void LoadConfigFileTest()
    {
        ConfigFile target = new ConfigFile();
        string filename = @"Config.xml";
        target.loadConfigFile(filename);
        Assert.AreEqual("<config></config>",target.configData.OuterXml);  
    }
Run Code Online (Sandbox Code Playgroud)

在 Assert.AreEqual("",target.configData.OuterXml); 行,我收到以下错误:

“ConfigTests.ConfigFile”不包含“configData”的定义,并且找不到接受“ConfigTests.ConfigFile”类型的第一个参数的扩展方法“configData”(您是否缺少 using 指令或程序集引用?)

我虽然 InternalsVisibleTo 属性应该允许单元测试访问私有字段......还是我错过了什么?

c# unit-testing

3
推荐指数
1
解决办法
4624
查看次数

单元测试void方法

我知道您可以通过检查其效果来单元测试void方法.但是,查看此代码中的loadConfigFile方法:

    internal XmlDocument configData;

    public ConfigFile()
    {
        configData = new XmlDocument();
    }

    /// <summary>
    /// Load config file into memory
    /// </summary>
    /// <param name="filename">path and filename of config file</param>
    public void loadConfigFile(string filename) 
    {
        if(string.IsNullOrEmpty(filename))
            throw new System.ArgumentException("You must specify a filename");

        try 
        {
            configData.Load(filename);
        }
        catch(Exception ex)
        {
            throw new Exception("Config file could not be loaded",ex);
        }
    }
Run Code Online (Sandbox Code Playgroud)

它将配置文件加载到私有字段中 - 需要将其保密,以便开发人员不直接修改该值.相反,修改将通过setConfigValue和getConfigValue方法完成(我假设需要单独测试).

鉴于此,我如何测试loadConfigFile实际工作?因为我无法访问私有configData字段.

c# unit-testing

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

为什么我不能等待?

我正在使用MVC5中的Identity 2.0,我正在尝试为当前用户获得第一个角色.

这段代码不会报告任何错误:

var DatabaseContext = new ApplicationDbContext();
var thisUserAccount = DatabaseContext.Users.FirstAsync(u => u.Id == Id);
Run Code Online (Sandbox Code Playgroud)

这段代码:

var DatabaseContext = new ApplicationDbContext();
var thisUserAccount = await DatabaseContext.Users.FirstAsync(u => u.Id == Id);
Run Code Online (Sandbox Code Playgroud)

报告以下错误:

'await'运算符只能在异步方法中使用.考虑使用'async'修饰符标记此方法并将其返回类型更改为'Task'

该方法是一种异步方法,为什么我不能使用"等待"?

此外,将致电:

DatabaseContext.Users.Load();
Run Code Online (Sandbox Code Playgroud)

在FirstAsync优化之前(而不是构建我假设FirstSync的ToList)?

我仍然试图掌握异步的东西可以做什么,所以任何有用的链接将非常感激.

c# asynchronous async-await

0
推荐指数
1
解决办法
230
查看次数

什么时候放弃LINQ?

LINQ似乎只会产生可怕的优化SQL(一般情况下).我自己可以编写更高效的T-SQL.

我的成千上万的每日访问者使用LINQ做大型网站?或者LINQ在某些时候应该被抛弃?如果有的话,用什么?什么时候?

c# linq entity-framework

0
推荐指数
1
解决办法
104
查看次数