我正在编写一个新程序,它需要一个数据库(SQL Server 2008).我现在为系统运行的所有东西都是64位,这让我想到了这个问题.对于各种表中的所有Id列,我应该将它们全部设为INT还是BIGINT?我怀疑该系统是否会超越INT范围,但我认为它可能在一些较大的财务表中.似乎INT是标准虽然......
在我的工作中,我们使用Moq进行模拟,使用Unity作为IOC容器.我对此很新,并且没有很多资源可以帮助我确定我应该使用的最佳实践.
现在,我有一组特定进程需要用来完成其工作的存储库接口(例如:IRepository1,IRepository2 ... IRepository4).
在实际代码中,我可以使用IOC容器并使用RegisterType()方法确定所有IRepository对象.
我试图找出能够测试需要4个提到的存储库的方法的最佳方法.
我想我可以只注册一个Unity IOC容器的新实例,并在每个模拟对象的容器上调用RegisterInstance,为每个模拟对象传递Mock.Object值.我试图使这个注册过程可重用,所以除了单元测试需要从存储库返回一些特定数据之外,我不必一遍又一遍地对每个单元测试做同样的事情.这就是问题所在......在模拟存储库上设置期望值的最佳做法是什么?好像我只是在Unity容器上调用RegisterType,我将失去对实际Mock对象的引用,并且无法覆盖行为.
我有这个用户定义的类型,我想添加一个主键或索引:
IF NOT EXISTS (
SELECT *
FROM sys.types st
JOIN sys.schemas ss
ON st.schema_id = ss.schema_id
WHERE st.name = N'DistCritGroupData'
AND ss.name = N'dbo')
BEGIN
CREATE TYPE [dbo].[DistCritGroupData] AS TABLE
(
[DistCritTypeId] [int] NOT NULL,
[ItemAction] [int] NOT NULL,
[ObjectId] [int] NOT NULL,
[OperatorType] [int] NOT NULL
);
END;
GO
Run Code Online (Sandbox Code Playgroud)
我基本上想要添加主键或聚簇索引.我试过这个,但是我收到错误'找不到对象"dbo.DistCritGroupData",因为它不存在或者你没有权限.
CREATE TYPE [dbo].[DistCritGroupData] AS TABLE
(
[DistCritTypeId] [int] NOT NULL,
[ItemAction] [int] NOT NULL,
[ObjectId] [int] NOT NULL,
[OperatorType] [int] NOT NULL,
CONSTRAINT [DistCritGroupData0] PRIMARY KEY CLUSTERED
( …Run Code Online (Sandbox Code Playgroud) 我刚刚从2010年升级到Visual Studio 2012,并且无法忍受Cntrl + F在编辑器的右上角显示新的"快速查找"对话框这一事实.我通常只是停靠查找和替换窗口,而更喜欢使用它.有没有办法禁用Cntrl + F启动新的快速查找窗口,而是将焦点移动到查找和替换窗口,类似于VS 2010的做法?
有谁知道为什么Microsoft没有在.NET Framework 4.0中的Lazy <T>类中包含Clear()方法或IsDirty属性或类似内容?(以下更新的问题)
我们使用自.NET 3.5以来一直使用的自制类型,其中我使用与Lazy <T>类相同的东西,但允许您让实例重新评估Lazy Func.我们想用新的.NET替换我们的类,但是这个Clear()或IsDirty机制不存在.
让我根据评论重新解释原始问题.有没有办法重新初始化Lazy <T> Func方法而不重新实现该类?如果没有,是否有办法将其作为扩展方法实现,或者只是一个不好的模式首先要遵循?
我开始搞乱EF 4.0因为我对POCO的可能性感到好奇......我想模拟断开连接的web环境并编写以下代码来模拟这个:
问题是当我在上面的Test方法中调用dataContext.SaveChanges时,不会应用更新.当我检查其EntityStateTracker时,testStore实体显示状态为"已修改",但当我在新的dataContext的Stores属性中查看它时,它不再被修改.我原本以为在new dataContext上调用Attach方法也会使对象的"Modified"状态结束,但事实并非如此.有什么我想念的吗?我肯定使用DynamicProxies进行自我跟踪POCO.
private static void SaveTestStore(string storeName = "TestStore")
{
using (var context = new DataContext())
{
Store newStore = context.Stores.CreateObject();
newStore.Name = storeName;
context.Stores.AddObject(newStore);
context.SaveChanges();
}
}
private static Store GetStore(string storeName = "TestStore")
{
using (var context = new DataContext())
{
return (from store in context.Stores
where store.Name == storeName
select store).SingleOrDefault();
}
}
[Test]
public void Test_Store_Update_Using_Different_DataContext()
{
SaveTestStore();
Store testStore = GetStore();
testStore.Name = "Updated";
using (var dataContext = …Run Code Online (Sandbox Code Playgroud) 我发现在我编写的许多简单的DTO/POCO类上重写ToString()很有用,当将鼠标悬停在调试器中的实例上时显示一些好的信息.
这是一个例子:
public class IdValue< T >
{
public IdValue( int id, T value )
{
Id = id;
Value = value;
}
public int Id { get; private set; }
public T Value { get; private set; }
public override string ToString()
{
return string.Format( "Id: {0} Value: {1}", Id, Value );
}
}
Run Code Online (Sandbox Code Playgroud)
在.NET中有没有办法自动拥有一个ToString()覆盖,列出公共属性或者是否有一个好的约定?
我们遇到了一个服务器的问题,并且它使用了StreamWriter类.有没有人遇到类似下面的问题?如果是这样,解决问题的解决方案是什么?
using( StreamWriter logWriter = File.CreateText( logFileName ) )
{
for (int i = 0; i < 500; i++)
logWriter.WriteLine( "Process completed successfully." );
}
Run Code Online (Sandbox Code Playgroud)
写出文件时,会生成以下输出:
Process completed successfully.
... (497 more lines)
Process completed successfully.
Process completed s
Run Code Online (Sandbox Code Playgroud)
尝试在关闭之前添加logWriter.Flush(),没有任何帮助.我写出的文本行越多,发生的数据丢失就越多.
我有以下appsettings.json配置:
{
"Serilog": {
"Using": [],
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"System": "Warning"
}
},
"Enrich": [ "FromLogContext", "WithMachineName" ],
"WriteTo": [
{
"Name": "File",
"Args": {
"path": "C:\\Logs\\log.json",
"formatter": "Serilog.Formatting.Elasticsearch.ElasticsearchJsonFormatter, Serilog.Formatting.Elasticsearch"
}
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试在上面的 appsettings.json 文件中配置的内容将在 C# 中表示为如下所示:
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
.WriteTo.File(new ElasticsearchJsonFormatter(inlineFields:true, renderMessageTemplate: false), @"C:\logs\log.json")
.CreateLogger();
Run Code Online (Sandbox Code Playgroud)
我需要将“inlineFields”设置为 true,将“renderMessageTemplate”设置为 false,作为 ElasticsearchJsonFormatter 实例上的 appsettings.json 文件中的覆盖。有没有办法在 appsettings.json 文件中执行此操作,以便我可以将配置排除在 C# 之外?
我有一个有很多子集合的类,它们都是使用Lazy <T>延迟加载的.调试时,即使没有加载,也可以显示这些子集合吗?或者在调试时强制评估?以下是其中一个儿童系列快速监视的屏幕截图.调试器显示的消息是"函数评估需要所有线程运行.",这对我来说很有意义,我只是希望这些子集合对调试器更友好.
