从阅读各种书籍和文章,我似乎经常发现建议使用的存储库模式.如果你需要能够将数据层从一个交换到另一个,我明白了,但我的问题是,如果我100%确定地知道我不会使用任何其他技术来进行数据访问,那么有什么理由吗用这种模式?
我发现自己最怀疑的是,在这种情况下,我并没有真正看到这个额外的抽象层可以带来什么.根据我的经验,EF具有流畅的linq-to-entities -functionality应该足以满足我的所有需求.
最常见的情况似乎是使用FindAll,Find,Add和Delete等方法启动存储库,所有这些都可以通过EF直接访问(因此不需要代码重复).
所以我只是缺少一些重点,或者当您需要支持多种不同的数据访问技术时,更多的存储库是什么?
所以我有一个表格的字典,Dictionary<int, Dictionary<int, Object>> myObjects我想List<Object> flattenedObjects尽可能简单地将其弄平.我试图提出一个聪明的解决方案,但到目前为止我所有的工作都是一个解决方案,有两个嵌套的foreach -loops迭代所有元素,但我想应该有一个更好的方法来实现这一点LINQ.
所以我决定将我引用的第三方dll添加到一个名为lib的单独文件夹中的源代码控制,然后从所述目录中引用它们.
这很好用,但是当我想更新文件时,TFS似乎完全忘记了文件实际已经改变的事实.即使我复制旧文件,也似乎无法检查新文件.如果我从源代码管理资源管理器中选择签入挂起的更改,我会收到一个信息框,说明没有更改.但是,如果我在最新版本和工作区版本之间运行比较单个DLL,TFS会告诉我文件确实不同.
那么从源代码控制中删除文件然后重新添加它们作为新版本的唯一解决方案,还是我可以以某种方式更新它们?
到目前为止,我一直在我的桌面应用程序上使用SQL Server Express,即使通常服务器仅由单个用户在同一台机器上使用该单个应用程序.这对我来说似乎总是有些愚蠢,因为全面的服务器相当沉重.
然后我发现有一种叫做SQL Server Compact的东西.事实上,我的申请已经相当庞大.所以我的问题是,如果我想改用SQL Server Compact,我们谈论的代码有哪些变化(使用C#)?
主要是我想知道我是否可以像访问Express一样访问Compact -version,它使用ADO.NET并将其指向localhost\sqlexpress.那么是否可以使用Compact创建另一个实例并将我的应用程序指向它,或者是以完全不同的方式使用它?
所以,我的应用程序依赖于大量的小文件。实际数字约为 90,000 人。现在,我使用一个需要访问这些文件的组件,但它接受这些文件的唯一方法是使用 URI。
到目前为止,我在开发应用程序时只是将包含所有文件的目录添加到我的调试文件夹中。然而,现在我必须考虑部署。我可以选择哪些选项将所有这些文件包含在我的部署中?
到目前为止,我已经提出了几种不同的解决方案,但没有一个能够完全发挥作用。首先是将所有文件添加到安装程序中,然后安装程序会将它们复制到其位置。这至少在理论上是可行的,但是它会使维护安装程序(使用 VS 生成的标准 MSI 安装程序)变得绝对是地狱。
我想到的下一个选项是将它们压缩到一个文件中,并将其添加为安装程序的一部分,然后使用自定义操作解压缩它们。然而,标准库似乎不支持复杂的 zip 文件,这使得这是一个相当困难的选择。
最后,我意识到我可以创建一个单独的项目并将所有文件添加为该项目中的资源。我不知道的是指向其他程序集中存储的资源的 URI 是如何工作的。意思是,所有支持“application://,,,:Assembly”格式的东西都是“标准”吗?
那么,这些是我唯一的选择,还是还有其他选择?解决这个问题的最佳选择是什么?
假设我在同一个数据库中有两个独立的表,表 Book 和 Cup。我只用主键 (int) 创建,称为 Id。然后,为了保持整洁,我将它们分成不同的项目并为两者创建 FluentMigrations,它们将驻留在Book.Migrations.dll和 中Cup.Migrations.dll。
现在我意识到也许我的书应该可以有一个名字,并创建一个新的迁移来添加一个名为 name 的列。我将此版本设置为 201408111220(因此是撰写本文时的时间戳),并将其称为 AddNameToBook。我应用此迁移并相应地更新数据库。
然后我意识到也许杯子应该有颜色。所以我在另一个项目中创建了一个新的迁移,版本为 201408111221,并将其命名为 AddColorToCup。我再次运行迁移,并更新数据库。
据我所知,到目前为止一切正常。我不确定的是,如果我现在向 Book 添加另一个迁移,例如 201408111224,应用它,然后尝试回滚。由于现在201408111221来自另一个程序集的版本存在于 VersionInfo 表中,FluentMigrator 将如何处理这个?它会在我面前抛出错误,还是因为当前程序集对它一无所知而只是忽略该行?
也欢迎其他关于以这种方式使用 FluentMigrator 的评论(一个数据库有多个程序集)。
所以问题很简单:我的项目引用程序集X而不是Z.但程序集X确实引用程序集Z.程序集Z更新一些频繁,所以每当我构建我的项目时,我也想获得最新版本的Z .
到目前为止,我已经提出了3个选项:
所以,我错过了什么,或者这些是我唯一的选择?
这个案子非常简单,我有这个界面
public interface IHasNext
{
IHasNext NextItem { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后我尝试像这样实现它:
public class Item : IHasNext
{
public int Id { get; set; }
Item NextItem { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为实现的属性NextItem不是同一类型(即使类型实现了接口).所以有人可以向我解释这个不起作用的原因,当你可以非常自由地交换它们实现的接口的类型,甚至作为类型参数(至少在IEnumerable和IQueryable上).
在ubuntu盒子里做了几天没什么事后,我决定尝试一些红宝石的东西.为此,我想开火pry.不幸的是,我被提出来了
抱歉,您不能在没有Readline或兼容库的情况下使用Pry.请
gem install rb-readline重新编译Ruby --with-readline.〜/ .rbenv/versions/2.1.1/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:在`require':libreadline.so.5:无法打开共享对象文件:没有这样的文件或目录 - 〜/ .rbenv/versions/2.1.1/lib/ruby/2.1.0/x86_64-linux/readline.so(LoadError)
一般来说,对于linux来说还是个新手,我想我会按照它说的那样做,并安装它rb-readline.安装通过很好,但似乎根本没有做任何事情.如果我这样做gem list p,包裹就不会出现.
所以,是的,我只是不知道该怎么做才能让它再次运行,我唯一能通过搜索找到的东西与没有rbenv的安装有关,并且与sudo等有关.
有任何想法吗?
好的,我不得不承认,我对所有这些构建自动化的东西都很新.但基本上我想知道的是,是否有办法以这样的方式连接我的构建定义,如果我有这样的情况
然后,当我对ProjectA进行更改并将其检入时,构建过程将自动构建ProjectB,最后构建ProjectC,并报告任何错误.
那么有没有办法实现这一点,或者首先应该以某种方式完全不同地处理这类事情?
build-automation tfs continuous-integration tfsbuild tfs2012
所以我的项目中有一个非常基本的数据模型(针对.NET 4.0,使用NuGet安装的EF 5,数据库优先),有2个表,Item和ItemGroup.
Item-table有各种字段,包括字符串和数字,以及指向ItemGroup的外键.
另一方面,ItemGroup只有Id,Name和Code(其中最后2个是字符串).
现在,我有大约50k个项目,只有100个ItemGroups.如果我context.Items.ToList()使用SQL事件探查器执行a ,持续时间大约为2-3秒,这是完全可以接受的.但是,如果我想使用同时加载ItemGroups context.Items.Include("ItemGroup").ToList(),则执行时间会跳到大约12秒.此外,如果我在获取所有Items之后只获取所有ItemGroup,则执行时间也很长.这让我相信这是物品到各自的团队的映射,花费时间.
但是,这仍然无法解释为什么SQL Profiler报告非常简单的INNER JOIN -query也会超过10秒,相比之下,没有JOIN的同一查询会花费2-3秒.
我在这里不知所措,以前从未遇到过这种问题,所以任何建议都非常受欢迎.