小编Jer*_*ose的帖子

使用fixture测试实体框架

我喜欢RailsDjango测试方法的一个原因是他们支持在每次测试运行之前使用fixture来设置数据库.

在过去,我使用严格的单元测试和模拟的存储库来测试我的代码,但我希望能够像上述测试方法一样易于使用,以便进行集成测试.

我听过一些关于代码优先和EF 5这种支持的讨论,但我不知道它是否升级到Rails和Django提供的水平.

当然有可比的东西.任何信息,将不胜感激!

c# tdd unit-testing entity-framework asp.net-mvc-3

21
推荐指数
2
解决办法
2552
查看次数

CA1500与SA1309 - 哪一个获胜?

我的前缀是说我理解Code Analysis和StyleCop都是指导原则,很多人选择忽略这些.但话说回来,我想看看这两条规则的普遍共识是什么.

规则CA1500表示不要使参数名称和私有字段名称相同.

另一方面,规则SA1309表示不要为成员添加下划线或"m_"作为前缀.

这使我们几乎没有选择区分私有支持字段与其相应的参数.拿这些例子.

SA1309抱怨:

class SomeClass
{
    int _someField;

    public SomeClass(int someField)
    {
        this._someField = someField;
    }
}
Run Code Online (Sandbox Code Playgroud)

CA1500抱怨:

class SomeClass
{
    int someField;

    public SomeClass(int someField)
    {
        this.someField = someField;
    }
}
Run Code Online (Sandbox Code Playgroud)

我有什么选择?我不想创建私有支持字段PascalCase,因为这是公共字段/属性的(我相信相当普遍的)约定.而且我不想重命名其中一个,只是为了解决歧义.

所以我留下了上面两个中的一个,这将要求我压制其中一个SA/CA规则.

你们通常做什么?更重要的是,这些规则的作者认为你应该做些什么(因为它们都没有在他们的文档中提供替代解决方案)?

c# code-analysis fxcop stylecop naming-conventions

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

HTTP请求成本与页面大小成本?

我知道最好尽量减少每个页面需要的请求数量.例如,组合javascript文件和使用css sprites将大大减少呈现页面所需的请求数.

我见过的另一种方法是将javascript嵌入页面本身,特别是对于特定于该页面的javascript,而不是真正在其他页面上共享.

但我的问题是:

在什么时候我的javascript变得太大,以至于将脚本拉入单独的文件并允许对单独的js文件的额外请求变得更有效?

换句话说,我如何测量多少字节等于一个请求的成本?

由于连续请求被缓存,因此调用相同js文件的唯一成本是请求的成本.将js保留在页面中将始终产生额外页面大小的成本,但不会产生额外请求的成本.

当然,我知道有几个因素:客户端的速度,带宽速度,延迟.但是必须有一个转折点,一个人做另一个更有意义.

或者,带宽如此便宜(速度,而不是金钱)这些天它需要比以往更多的字节,以超过请求的成本?似乎是一种趋势,页面大小变得不那么重要,而请求的成本已经趋于稳定.

思考?

performance http httpwebrequest

19
推荐指数
3
解决办法
3586
查看次数

在MVC3中,我应该有单独的"编辑"模型与"显示"模型吗?

使用MVC3,我应该设计我的视图模型,以便有一个绑定到视图(DisplayModel),还有一个回发到控制器(EditModel)?

为了澄清,我不是在询问数据模型与视图模型 - 我知道将视图/控制器绑定到数据/域模型并不好.

我也不是要求跨两个单独的视图共享一个模型,一个用于显示数据的视图,另一个用于编辑数据的视图.

相反,我问的是一个用于编辑数据的视图,以及绑定到视图的模型与绑定到控制器操作的模型.

换句话说,如果这是我的观点:

@model MyApp.Models.CustomerModel
Run Code Online (Sandbox Code Playgroud)

我的控制器动作应该是这样的:

public ActionResult Index(CustomerModel model)
Run Code Online (Sandbox Code Playgroud)

要么:

public ActionResult Index(CustomerEditModel model)
Run Code Online (Sandbox Code Playgroud)

有一次,我们正在做后者(单独).但最近,我们开始做前者(共享).

这种变化的原因是因为:

  1. 使用MVC3不引人注意的验证,如果我在我的模型上使用DataAnnotations进行验证,如果它们是分开的(在显示模型上映射客户端验证,在服务器端验证的编辑模型上),则需要在两个模型中使用它们. .

  2. 随着我们的应用程序的成熟,我们意识到我们的显示和编辑模型是95%相同的,除了我们的视图模型中的选择列表.我们现在将它们移动到一个共享类,现在通过视图传递它们.

但我已经看到其他一些讨论指出,让视图/控制器共享模型是一个坏主意,并且它违反了关注点的分离.

有人可以帮我理解这两种方法的权衡吗?

asp.net-mvc viewmodel asp.net-mvc-3

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

MVC不显眼的范围验证动态值

我的模型有一个值,它必须在我的模型上的两个其他值的范围内.

例如:

public class RangeValidationSampleModel
{
    int Value { get; set; }

    int MinValue { get; set; }

    int MaxValue { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当然,我不能将这些Min/MaxValues传递给我的DataAnnotations属性,因为它们必须是常量值.

我确定我需要构建自己的验证属性,但是我没有这么做,也无法理解它应该如何工作.

我已经搜索了大约一个小时,并且已经看到了各种用于构建自定义验证的解决方案,但是使用MVC3不显眼的验证找不到任何解决这个特定问题的方法.

asp.net-mvc data-annotations unobtrusive-validation asp.net-mvc-3

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

如何控制.NET服务引用的文件名?

Windows在路径中限制为259个字符.不幸的是,由于我们的一些服务引用名称,这开始给我们带来问题.

例如,我们的TFS分支具有已经很长的路径,然后.NET服务引用几乎加倍,因为它们总是使用完全限定的命名空间作为文件名:

Some.Really.Long.Fully.Qualified.Namespace.Service.Reference.Name.datasource

AFAIK,你不能改变服务引用的名称 - 但是我错了.可以这样做吗?

如果没有,这个烦人的问题还有其他可行的解决方法吗?

编辑:此外,我知道一个明显的解决方案是缩短我们的命名空间和/或路径,但假设在这种情况下我们不能这样做.:)我主要是想弄清楚如何控制服务引用的文件名.

更新:我遇到的根本问题是TFS不允许我获取特定分支的最新信息.这是确切的错误:

TF205022:以下路径包含超过允许的259个字符:[C:\ Some-really-long-259-character-path-here]

.net windows namespaces visual-studio-2010 service-reference

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

ActionOfWork in Action Filter似乎是缓存

我有一个使用IoC(Unity)的MVC 3站点,我的模型是用EF4和POCO生成的.我正在使用动作过滤器来提交我的UnitOfWork:

public class UseUnitOfWorkAttribute : ActionFilterAttribute, IActionFilter
{
    private readonly IUnitOfWork _unitOfWork;

    public UseUnitOfWorkAttribute()
    {
        _unitOfWork = IoCFactory.Instance.CurrentContainer.Resolve<IUnitOfWork>();
    }

    void IActionFilter.OnActionExecuted(ActionExecutedContext filterContext)
    {
        _unitOfWork.Commit();
    }

    void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,即使Commit()似乎被解雇了,它似乎在某种程度上缓存了它认为"肮脏"的东西.

例如,在我的控制器中,以下内容从服务类执行:

var user = _userRepository.Single(u => u.Id == 2);
user.DateAdded = DateTime.Now;
Run Code Online (Sandbox Code Playgroud)

每当我重新构建解决方案并点击此控制器操作时,实际上都会提交更改.但是,对控制器的连续命中不会做任何事情.

另一方面,如果我将UnitOfWork放在我的控制器中并在服务方法调用之后提交它,它会按预期工作(每次我请求控制器操作时):

public AccountController()
{
    _unitOfWork = IoCFactory.Instance.CurrentContainer.Resolve<IUnitOfWork>();
}

public ActionResult Test()
{
    var user = _userRepository.Single(u => u.Id == 2);
    user.DateAdded = DateTime.Now;
    _unitOfWork.Commit();
}
Run Code Online (Sandbox Code Playgroud)

所以看起来肯定会出现某种缓存,但我无法弄清楚缓存的内容 - UnitOfWork,ActionFilter或存储库.

什么想法可能会发生什么?如果没有,任何想法我还能做些什么来排除故障?

提前致谢.

asp.net-mvc caching inversion-of-control unit-of-work action-filter

12
推荐指数
2
解决办法
2856
查看次数

使用Linq对嵌套值求和

简单问题:我的用户可以拥有许多可以拥有许多产品的订单.Linq(lambda)查询是什么样的,以获得用户对所有Product.Price值的总计?

我试过这个:

int total = users.Sum(u => u.Orders.Sum(o => o.Products.Sum(p => p.Price)));
Run Code Online (Sandbox Code Playgroud)

但它给了我:

转换为值类型"Int32"失败,因为实现值为null.结果类型的泛型参数或查询必须使用可空类型.

当然,用户可能没有任何订单,订单可能没有任何产品.但是Product.Price不是可以为空的值.

所以我尝试了这个,认为它在空集合上窒息:

int total = users.Sum(u => u.Orders.Sum(o => o.Products.Sum(p => p.Price) ?? 0) ?? 0) ?? 0;
Run Code Online (Sandbox Code Playgroud)

但它正在抛出编译错误,说它的左侧??不可为空.

我究竟做错了什么?

提前致谢.

更新:从他的答案中使用Marc的逻辑后,我的上述示例的工作版本:

int total = users.Sum(u => u.Orders.Sum(o => o.Products.Sum(p => (int?)p.Price))) ?? 0;
Run Code Online (Sandbox Code Playgroud)

c# linq lambda

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

MVC编辑/显示模板的官方"如何"?

我一直在使用MVC编辑器和显示模板,但已经意识到MVC编辑器/显示模板(Html.EditorFor()和Html.DisplayFor())的官方文档似乎很少.我发现基本的MSDN文档只显示了技术细节(这些文档本身并不是很有帮助),但我正在寻找更多的官方操作方法,有点像这个例子.

编辑/显示模板是不是一个事后的想法,并没有足够的广泛用于证明更深入的官方文档?

或者,我是盲目的,我正在寻找的是什么,我还没有找到它?

asp.net-mvc mvc-editor-templates asp.net-mvc-3

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

清除ViewBag?

有没有办法清除ViewBag

ViewBag 没有二传手,所以它不能简单地被淘汰:

ViewBag = null;
Run Code Online (Sandbox Code Playgroud)

我也似乎无法使用反射来迭代它并消除其动态属性,因为您无法创建一个实例dynamic.

注意:我知道ViewBag它本身就有点代码味道,因为它不是强类型的,并且基本上是一个巨大的全局变量集合.我们正在远离它,但在此期间仍然需要处理它.

c# asp.net-mvc viewbag

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