小编Mat*_*sca的帖子

在单独的程序集中启用具有上下文的迁移?

我有一个项目,我想update-database反对我,但我在一个单独的项目中有我的模型和上下文.

如果我运行,enable-migrations我会收到此错误:在程序集"MyProject"中找不到上下文类型.

这可能是因为我的Context在MyProject.MVC中.

如果我enable-migrations针对MyProject.MVC 运行,我必须添加一个app配置文件.我不想这样做,因为我想在许多项目中使用代码.

那么我可以enable-migrations针对MyProject 运行并以某种方式告诉它在MyProject.MVC中查找Context吗?

.net c# entity-framework asp.net-mvc-4 ef-migrations

64
推荐指数
2
解决办法
5万
查看次数

使LINQ Query可以访问NameValueCollection

如何使NameValueCollectionLINQ查询运算符可以访问,例如where,join,groupby?

我试过以下:

private NameValueCollection RequestFields()
{
    NameValueCollection nvc = new NameValueCollection()
                                  {
                                      {"emailOption: blah Blah", "true"},
                                      {"emailOption: blah Blah2", "false"},
                                      {"nothing", "false"},
                                      {"nothinger", "true"}
                                  };
    return nvc;

}

public void GetSelectedEmail()
{
    NameValueCollection nvc = RequestFields();
    IQueryable queryable = nvc.AsQueryable();
}
Run Code Online (Sandbox Code Playgroud)

但我得到一个ArgumentException告诉我源不是IEnumerable <>.

.net linq namevaluecollection

61
推荐指数
4
解决办法
3万
查看次数

Mvc4捆绑,缩小和AngularJS服务

有没有办法自定义Asp.Net MVC4捆绑和缩小功能缩小js文件的方式?

意思是,我不想完全关闭缩小,但"按原样"它只是打破了AngularJs.

由于AngularJs使用DI和IoC方法在控制器中注入服务,因此如下:

function MyController($scope) { }
Run Code Online (Sandbox Code Playgroud)

一旦缩小,变为:

function MyController(n) { }
Run Code Online (Sandbox Code Playgroud)

通常这不会有问题,但AngularJs使用参数名来了解要注入的服务.所以$ scope应保持$ scope,以及angular控制器中的任何其他参数.其他所有东西,如局部变量等,都应该正常缩小.

我找不到关于如何配置Mvc4缩小的任何明确的文档,它似乎相当愚蠢,因为它是"全有或全无",所以我想我错过了一些东西.

谢谢.

asp.net-mvc asp.net-mvc-4 angularjs bundling-and-minification

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

NuGet和Git子模块

我已经广泛搜索了一个解决方案,尝试了不同的方法但没有工作,所以我在这里问.

我目前需要的是拥有单独的Git存储库,每个存储库包含一个带有相关项目的.Net解决方案文件.这些存储库中的一个或多个将仅包含类库,我需要在其他存储库解决方案中使用这些库.

我的第一个是使用Git子模块来避免难看的复制粘贴,并且在开发应用程序时仍然可以使用类库的源代码.

所以我的尝试是包含子模块,然后在我当前的解决方案中"添加现有项目"并加载所需的类库(ies).

我无法克服的巨大问题是Nuget包恢复.导入的项目引用"..\Packages*"中的库,但是当作为子模块导入时,它们位于另一个子文件夹中,因此无法找到所需的依赖项:

- MySolution.sln
- Packages folder
- MyAppProject folder
- Submodule folder
-- EXPECTED packages folder for MyLibraryProject that I cannot generate
-- MyLibraryProject folder
Run Code Online (Sandbox Code Playgroud)

我找到并试过的一个解决方案就是这个,但它有两个主要问题:

  • 它应该使用MsBuild包恢复工作,我绝对不想使用它
  • 即使尝试使用MsBuild包恢复它根本不起作用,我仍然在我当前的解决方案文件夹中有一个Packages文件夹.也许我做错了但又一次,我不想使用MsBuild方法.

现在我真的想知道是否有一个干净的方法来解决这个问题,或者我唯一能做的就是放弃在我的应用程序解决方案中提供库源代码并在私有NuGet提要和参考上发布我的库他们从那里.

谢谢.

.net git git-submodules nuget nuget-package-restore

24
推荐指数
2
解决办法
2535
查看次数

Asp.net Mvc,Razor和Localization

我知道这个问题已经多次出现在这些页面上,但我仍然没有找到我需要找到的"好解决方案".让我们开始解释.

.net和mvc中的本地化有两种方式,甚至可以混合在一起:

  • 资源文件(本地或全局)
  • 具有视图引擎的本地化视图可根据文化调用适当的视图

我将解释我尝试过的解决方案以及我遇到的所有问题.

资源文件中的文本,视图中的所有标记

这个解决方案让我将每个文本都放在资源中,以及视图中的每个标记,甚至是[strong]或[span]等内联标记.

优点:

  • 清洁分离,无需任何结构定位.
  • 简单编码:从资源返回的所有内容都经过html编码.

缺点:

  • 如果我有一个强大的段落,一些链接等我必须在许多资源键中拆分它.这被认为使视图太难以理解,并且创建它也需要太多时间.
  • 出于与上述相同的原因,如果在两种不同的语言中[强]文本在不同的地方(如"Il cane di Marco"和"Marcos's dog "),我无法实现它,因为我的所有标签都在视图.

资源文件中的文本和内联标记,通过参数

此方法将使资源包含string.Format的一些占位符,并且这些占位符将使用内嵌标记进行后编码.

优点:

  • 干净的分离,只有文本中的占位符,所以如果我要用[em]替换[strong],我会在视图中将其作为参数传递,并在每种语言中进行更改

缺点:

  • 编码有点难,我必须对资源中的值进行预编码,然后使用string.Format,最后将其作为MvcHtmlString返回,告诉视图引擎在显示时不重新编码.
  • 出于与上述相同的原因,例如,包括ActionLink作为参数将是麻烦的.假设我从资源中获取了actionlink的文本.我的方法已经编码了.但是,ActionLink方法会再次对其进行重新编码.我需要一个不同的方法来获取资源而不编码它们,或者新的辅助方法获取MvcHtmlString而不是字符串作为文本参数,但两者都相当不实用.
  • 仍然需要花费大量时间来构建视图,必须创建所有资源键然后填充它们.

本地化的意见

优点:

  • 所有视图都是纯HTML.没有资源可读.

缺点:

  • 到处都是重复的HTML.我甚至不需要解释这是多么邪恶.
  • 必须手动编码所有麻烦的字符,如严重的元音,引号等.

结论

上述技术的混合继承了优点和缺点,但它仍然没有好处.我很难找到一个合适的生产解决方案,而上述所有都被认为是"不实用"和"耗时".

更糟糕的是,我发现没有一个工具可以将aspx或cshtml(甚至html)视图/页面中的"文本"重构为资源.所有工具都可以将代码文件(.cs或.vb)中的System.String实例重构为仅资源(例如resharper,以及我现在不记得的其他几个).

因此我陷入困境,找不到任何合适的东西,也无法在网上找到任何东西.是否有可能没有其他人遇到过这个问题,并找到了解决方案?

c# asp.net-mvc resources localization

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

实体框架5查询中的数据类型错误

我们在业务解决方案中使用EF 5.0作为我们的首选ORM,以n层方式构建,所有内容都解耦,并且使用ninject构建了一个很好的组合根.

最近,我们一直在构建一个使用下面分区的数据库,我们在DATE列上有一些重要的索引.

这些列在Sql Server 2008上正确声明.我们还在EF映射中添加了正确的数据类型和HasColumnType("Date")指令.

仍然,当通过Linq to Entities查询表时,我们过滤日期的参数是由类型创建的DateTime2,甚至列也会DateTime2在查询中强制转换,因此类型与参数匹配.

这种行为有几个问题.首先,如果我告诉EF引擎数据库中的列是DATE为什么要将其转换为DateTime2

其次,此强制转换使数据库忽略索引,因此不使用分区.我们每个物理分区有一年,如果我问一个日期范围,比方说,2013年2月到2013年3月,扫描应该仅在一个物理分区上进行.如果手动使用正确的数据类型DATE但是对DateTime2所有分区进行扫描,则它可以正常工作,从而大大降低了性能.

现在,我确定我错过了一些东西,因为微软ORM在Microsoft Sql Server上不能正常工作会相当愚蠢.

我一直无法找到有关EF如何在查询中使用正确数据类型的任何文档,所以我在这里问.任何帮助将不胜感激.

谢谢.

.net c# sql-server orm entity-framework

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

IoC容器,在编译时检查错误

我有一个简单的问题.

假设我有一个.Net解决方案,有不同的项目,比如一些类库(bll,dal等)和一个可以是web应用程序或wpf应用程序的主项目,这没关系.

现在假设我想使用IoC容器(如Windsor,Ninject,Unity等)来解析验证器,存储库,通用接口实现等问题.

我把它们放在一起.编译并运行良好.然后,有一天,我添加了一个新服务,在我的代码中,我只是尝试通过IoC容器解决它.事实是,我忘记在IoC配置中注册它.

所有内容都会编译,应用程序将被部署并运行.一切正常,除了页面的代码要求容器的新服务,容器回答"嘿,我对此服务一无所知".

您将记录您的错误,以及用户友好的错误页面.您将检查错误,查看问题并进行修复.很标准.

现在让我们说我们想要改进这个过程,并且在某种程度上能够在编译时知道我们期望IoC容器处理的每个服务是否在代码中正确注册.

怎么能实现这一目标?有一件事,单元测​​试被排除在可能的答案之外,我正在寻找另一种方式,如果确实存在的话.

思考?

编辑 - 经过一些回答和评论,似乎单元测试确实是实现此功能的唯一方法.

我想知道的是,如果单元测试 - 由于任何原因 - 不可能,因此IoC无法在编译时进行测试,这是否会阻止您使用IoC容器并选择在代码中进行直接实例化?我的意思是,您是否认为使用IoC和后期绑定太不安全和冒险,并认为其优势被这个"缺陷"所超越?

.net error-handling dependency-injection build inversion-of-control

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

共享开发机器上的IIS Express(rdp)

我有一个我认为可能很常见的问题,在网上搜索但却一无所获.

我们使用的是共享开发机器,每个开发人员都通过RDP连接并拥有自己的配置文件,桌面等.

我遇到的问题是IIS Express.由于它是在用户级别配置的(applicationhost.config在documents/iisexpress/config中),并且配置的端口必须与.csproj文件中声明的端口匹配,因此两个开发人员无法在同一端口上运行,因为它会给出错误"该港口已在使用中".

因此,为了使其工作,我们必须手动更改csproj和applicationhost.config中的每个开发人员的端口,但它只是一个临时修复,因为当我们将更改提交到SVN时,csproj文件被合并,所以我们有每次有人提交/更新时都要执行此过程.

我的问题是:在共享开发机器上使用Visual Studio 2010有一种干净的方式吗?

谢谢.

visual-studio-2010 iis-express asp.net-mvc-3

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

EF Code First:不包括可选关系

我的代码中有一个特定的查询,需要急切加载所有相关的实体(两个 - > 1个FK和 - > N个FK),因为上下文将在此之后处理.

我做了一个通用的"查询"方法,params Expression<Func<MyItem, object>>[] includes然后内部链接它们.那部分工作正常.

查询如下所示:

var item = facade.Query<MyItem>(
                c => c.Childs.Select(x => x.Parent),
                c => c.Childs.Select(x => x.SubChild1),
                c => c.Childs.Select(x => x.SubChildNotWorking),
                c => c.Childs.Select(x => x.SubChild2),
                c => c.Childs.Select(x => x.SubChild3),
                c => c.Childs.Select(x => x.SubChildrens)
                ).FirstOrDefault(c => c.Name == name);
Run Code Online (Sandbox Code Playgroud)

不工作属性的映射(放置在SubChildNotWorking的配置中):

this.HasMany(scnw => scnw.Childs).WithOptional(c => c.SubChildNotWorking).HasForeignKey(c => c.MyForeignKey);
Run Code Online (Sandbox Code Playgroud)

在所有包含中,只有SubChildNotWorking实际上不起作用.在使用调试器检查返回的对象时,我会在所有属性上看到代理.打开代理为我提供了所有其他关系的正确数据,并为该SubChildNotWorking属性提供了"objectcontext已被处置异常" .

我能够发现的唯一区别是,它SubChildNotWorking是一个可以为空的FK(DB上有可空列和dbcontext中的WithOptional配置),而所有其他都是使用WithRequired配置的不可空FK.

数据库也是一个没有使用Code First创建的遗留数据库而不遵循其约定,我只是在DbContext中进行了映射.其他一切都很好.

我试图找出是否急于加载对可空的FK不起作用,但我找不到任何关于它的文档.

这是一个错误,还是预期的行为?但最重要的是,我该如何解决这个问题呢?

谢谢.

c# entity-framework lazy-loading code-first eager-loading

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

XUnit,AutoFixture和Moq最佳实践

我正在阅读大量文档和示例,了解如何正确地对标题中的三个组件进行单元测试.我想出了一种针对我的业务逻辑的方法的测试方法,但它感觉非常笨重和肮脏.

我想从那些对这个主题更有经验的人那里得到一些反馈,看看我如何改进它.

这是代码,解释如下:

[Fact]
public void ShouldGetItemWithSameId()
{
    var fixture = new Fixture().Customize(new AutoMoqCustomization());
    var facade = fixture.Freeze<Mock<IDataFacade>>();
    facade.Setup(c => c.Get(It.IsAny<int>())).Returns((int i) => new Item { Key = i });

    var sut = fixture.Create<BusinessLogic>();
    var expected = fixture.Create<int>();

    Assert.Equal(expected, sut.Get(expected).Key);
}
Run Code Online (Sandbox Code Playgroud)

我的BusinessLogic类使用一个IDataFacade构造函数参数,该参数负责在其Get(int)方法中检索具有相同Id的项目,非常基本的东西.

我冻结了IDataFacade模拟并将其设置为构造一个与Id匹配的对象It.IsAny<int>.然后我创建我的SUT并测试它.工作良好.

我想了解一下,考虑到以下方面我是否可以改进:

  • 我必须测试更复杂的方法,比如一个Query方法,它接受一个包含很多属性的类,这些属性将用作匹配被查询类型的属性的过滤器.在这种情况下,我不知道如何正确地执行模拟的"设置"部分,因为我必须初始化所有或接近所有返回类型的属性,并且在这种情况下它不是单个项目但是整个系列
  • 设置部分感觉不合适,我希望能够在更多方法中重复使用它

我有一些其他测试用Theory,AutoMoqData但我无法使用这种方法实现这个测试(我认为更复杂的测试),所以我Fact用手动实例化的夹具切换回普通.

任何帮助将非常感激.

c# unit-testing moq xunit.net autofixture

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