小编Iai*_*way的帖子

创建泛型类型参数的新实例,但不获取代码覆盖率

我通过代码覆盖运行我的代码,下面的行显示1块未覆盖.

谁能告诉我该行的哪一部分没有执行?

在此输入图像描述

一个例子:

public abstract class Base
{
    public abstract IExample CreateEntity<TExample>() where TExample : IExample, new();
}

public class Class1 : Base
{
    public override IExample CreateEntity<TExample>()
    {
        IExample temp = new TExample();
        return temp;
    }
}

public interface IExample
{

}

public class TEx : IExample
{

}
Run Code Online (Sandbox Code Playgroud)

和测试方法

    [TestMethod]
    public void TestMethod1()
    {
        Class1 ex = new Class1();
        ex.CreateEntity<TEx>();
    }
Run Code Online (Sandbox Code Playgroud)

c# visual-studio-2008

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

在自引用表中急切地将Linq加载到SQL实体

我有2个相关的Linq to SQL问题.请参阅下面的图片,看看我的模型是什么样的.

问题1

我想知道如何User.AddedByUser在我的User 类/表上加载字段.该字段由字段上的关系生成User.AddedByUserId.该表是自引用的,我试图弄清楚如何让Linq to SQL User.AddedByUser急切地加载属性,即无论何时User加载/获取任何实体,它还必须获取User.AddedByUser和User.ChangedByUser.但是,据我所知,这可能会成为一个递归问题......

更新1.1:

我试过使用DataLoadOptions如下:

var options = new DataLoadOptions();
options.LoadWith<User>(u => u.ChangedByUser);
options.LoadWith<User>(u => u.AddedByUser);

db = new ModelDataContext(connectionString);
db.LoadOptions = options;
Run Code Online (Sandbox Code Playgroud)

但这不起作用,我在第2行得到以下异常:

System.InvalidOperationException occurred
  Message="Cycles not allowed in LoadOptions LoadWith type graph."
  Source="System.Data.Linq"
  StackTrace:
       at System.Data.Linq.DataLoadOptions.ValidateTypeGraphAcyclic()
       at System.Data.Linq.DataLoadOptions.Preload(MemberInfo association)
       at System.Data.Linq.DataLoadOptions.LoadWith[T](Expression`1 expression)
       at i3t.KpCosting.Service.Library.Repositories.UserRepository..ctor(String connectionString) in C:\Development\KP Costing\Trunk\Code\i3t.KpCosting.Service.Library\Repositories\UserRepository.cs:line 15
  InnerException:
Run Code Online (Sandbox Code Playgroud)

异常是不言自明的 - 对象图不允许是循环的.另外,假设第2行没有抛出异常,我很确定第3行会,因为它们是重复键.

更新1.2:

以下内容也不起作用(不与上面的Update 1.1结合使用):

var query = from u …
Run Code Online (Sandbox Code Playgroud)

c# eager-loading linq-to-sql self-reference

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

压缩N IEnumerable <T>一起?同时迭代它们?

我有:-

IEnumerable<IEnumerable<T>> items;
Run Code Online (Sandbox Code Playgroud)

我想创造: -

IEnumerable<IEnumerable<T>> results;
Run Code Online (Sandbox Code Playgroud)

其中"结果"中的第一项是"项目"的每个IEnumebles的第一项的IEnumerable,"结果"中的第二项是每个"项目"的第二项的IEnumerable等.

IEnumerables不一定是相同的长度.如果项目中的某些IEnumerables在特定索引中没有元素,那么我希望结果中匹配的IEnumerable中包含更少的项目.

例如:-

items = { "1", "2", "3", "4" } , { "a", "b", "c" };
results = { "1", "a" } , { "2", "b" }, { "3", "c" }, { "4" };
Run Code Online (Sandbox Code Playgroud)

编辑:另一个例子(评论中要求): -

items = { "1", "2", "3", "4" } , { "a", "b", "c" }, { "p", "q", "r", "s", "t" };
results = { "1", "a", "p" } , { "2", "b", "q" }, { "3", …
Run Code Online (Sandbox Code Playgroud)

.net c# linq

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

如何阻止 [Required] 注释在被覆盖的字段上被继承?

我有一个电话号码通知模型(用户通过与他们的帐户关联的电话号码获得紧急情况通知,并且他们可以设置调用这些电话的顺序)。大多数情况下,模型的电话号码部分是必需的,但在创建新用户的过程中存在一种特殊情况,我们不想强制使用它。

我创建了一个非常简单的子对象 UserCreationPhoneNotificationModel,它继承自上述 UserPhoneNotificationModel。还有一些其他小的更改,但这里的相关更改是覆盖 PhoneNumber 字段,以便不再需要它。

在父模型中它是

[Required]
public virtual string PhoneNumber { get; set; }
Run Code Online (Sandbox Code Playgroud)

在子模型中它只是

public override string PhoneNumber { get; set; }
Run Code Online (Sandbox Code Playgroud)

我认为这可以解决问题,但显然不是。我认为问题在于 RequiredAttribute 上会有 Inherited = true ,但事实并非如此,所以我不完全确定为什么它会被继承到子类中。

我做了双重检查以确保,从父类中的字段中删除 Required 也使得子类中的字段不需要,所以这绝对是某种继承的东西。

c# asp.net-mvc data-annotations

7
推荐指数
2
解决办法
4485
查看次数

从Visual Studio 2015中的代码覆盖率中排除自动属性

我刚刚将一堆项目升级到VS2015/C#6.

现在,MSTest的代码覆盖率分析报告单元测试未涵盖某些自动属性.在Visual Studio 2013中并非如此,我怀疑它可能与C#6中的新autoproperty功能有关.

处理所产生的所有误报都会使代码覆盖率工具的目的失败,因为它几乎不可能识别缺乏测试覆盖率的实际代码.我们不想为所有DTO编写单元测试,而且我真的不需要通过项目注释每个自动属性ExcludeFromCodeCoverage.

我在https://github.com/iaingalloway/VisualStudioCodeCoverageIssue创建了一个有效的MCVE


  • VisualStudio2013.sln在Visual Studio 2013 Premium或Ultimate中打开.
  • 单击测试 - >分析代码覆盖率 - >所有测试.
  • 观察"代码覆盖率结果"窗口报告0块"未涵盖".

  • VisualStudio2015.sln在Visual Studio 2015 Enterprise中打开.
  • 单击测试 - >分析代码覆盖率 - >所有测试.
  • 观察"代码覆盖率结果"窗口报告1块"未覆盖"(ExampleDto.Value的getter)

是否可以在Visual Studio 2015中配置内置代码覆盖率工具以忽略Visual Studio 2013之类的自动属性?

c# mstest code-coverage c#-6.0 visual-studio-2015

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

是否可以测试给定的表达式是否可以转换为SQL*而无需*连接到SQL数据库?

例如:-

// This one will be converted to SQL no problem
Expression<Func<Foo, bool>> predicate = x => x.Name = "Foo";

// This one will throw a NotSupportedException because the QueryProvider
// doesn't support reference comparisons
Expression<Func<Foo, bool>> predicate = x => x == someOtherFoo;

// This one doesn't work because the query provider can't
// handle IsAwesome()
Expression<Func<Foo, bool>> predicate = x => x.IsAwesome();
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种在运行之前测试它的方法,理想情况是在与数据库隔离的自动化测试中.

我花了一些时间在MSDN上搜索试图找到如何实例化我自己的QueryProvider,但我的Google-fu似乎今天失败了.

提前致谢!

c# entity-framework

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

我可以在定义的解决方案中使用 roslyn 分析器吗?

据我了解,有两种方法可以分发和使用 roslyn 分析器:-

  1. 作为 Visual Studio 插件
  2. 作为 Nuget 包

我经常发现自己想要强制执行某些特定于域的限制,以及方便的代码修复。(例如,“我们需要实体框架延迟加载,因此 WidgetFrobber.EntityFrameworkEntities 命名空间中的每个导航属性都应该是虚拟的。”)

如果我团队中的某个人不小心编写了public ICollection<Widget>而不是 ,那么编写一个使构建失败的小型分析器是微不足道的public virtual ICollection<Widget>,但是由于这个假设的分析器不打算在我的团队之外共享(或者,实际上,超出它定义的 .sln)我宁愿在更新分析器时不分发插件或更新 nuget 包。

  • References -> Add Reference -> Project 让我引用分析器的类型,但实际上并未将其添加为分析器。

  • References -> Analyzers -> Add Analyzer -> Browse... 需要 .dll 而不是项目引用。

是否可以在定义它的 .sln 中引用 Roslyn 分析器,就像我可以引用另一个项目一样?

c# visual-studio visual-studio-2015 roslyn-code-analysis

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

使用Entity Framework批准对实时数据的更改

我要求只有超级管理员才能修改"实时"数据.

目前,如果普通管理员想要对实时数据进行更改: -

  1. 超级管理员取消发布数据
  2. 普通的管理员进行了更改
  3. 超级管理员批准更改并发布数据

如果我想尝试消除第1步并让旧数据保持有效直到超级用户批准更改,我有哪些选择?

我正在使用ASP.NET MVC和EF4,因此我对围绕EF的解决方案特别感兴趣,这些解决方案可以对我的控制器透明,但我也有兴趣了解数据库层中的解决方案(或完全不同的上下文) )

.net database entity-framework

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

Ninject - 将泛型类型与约束绑定

是否可以设置 ninject 绑定来遵守通用约束?

例如:

interface IFoo { }
interface IBar { }
interface IRepository<T> { }

class FooRepository<T> : IRepository<T> where T : IFoo { }
class BarRepository<T> : IRepository<T> where T : IBar { }

class Foo : IFoo { }
class Bar : IBar { }

class Program
{
    static void Main(string[] args)
    {
        IKernel kernel = new StandardKernel();

        // Use this binding only where T : IFoo
        kernel.Bind(typeof(IRepository<>)).To(typeof(FooRepository<>));

        // Use this one only where T : IBar …
Run Code Online (Sandbox Code Playgroud)

.net c# dependency-injection ninject ioc-container

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

如何将依赖项注入ELMAH自定义ErrorLog?

我有一个ELMAH自定义ErrorLog,它使用EF Code-First上下文来存储错误: -

class EntityFrameworkElmahErrorLog
{
    public EntityFrameworkElmahErrorLog(IDictionary config) : this() { }

    public override ErrorLogEntry GetError(string id)
    {
        using (var context = new MyContext())
        {
            var intId = Int64.Parse(id, CultureInfo.InvariantCulture);
            var item = context.ErrorLog.Single(x => x.Id == intId);
            return new ErrorLogEntry(this, id, ErrorXml.DecodeString(item.Details));
        }
    }

    // etc.

}
Run Code Online (Sandbox Code Playgroud)

ErrorLog已在web.config中连接: -

<errorLog type="MyProject.EntityFrameworkErrorLog, MyProject" />
Run Code Online (Sandbox Code Playgroud)

我已经在项目的其他地方使用了Ninject.我想注入,MyContext以便ErrorLog没有实例化自己的依赖,但我没有运气在文档中找到钩子.ELMAH似乎是在ErrorLog内部实例化,所以我似乎唯一的选择是使用ServiceLocator我的自定义内部ErrorLog,如果可能的话我想避免使用.

ELMAH中有哪些更好的钩子我可以用来注射?

c# elmah ninject

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