小编Sim*_*hes的帖子

C#中Enum.Parse的通用版本

我经常想知道为什么C#还没有实现Generic Enum.Parse

可以说我有

enum MyEnum
{
   Value1,
   Value2
}
Run Code Online (Sandbox Code Playgroud)

从XML文件/数据库条目我想创建一个枚举.

MyEnum val = (MyEnum)Enum.Parse(typeof(MyEnum), "value1", true);
Run Code Online (Sandbox Code Playgroud)

难道它没有被实现为类似的东西

MyEnum cal = Enum.Parse<MyEnum>("value1");
Run Code Online (Sandbox Code Playgroud)

这似乎是一个小问题,但它似乎是一个被忽视的问题.

有什么想法吗?

c# generics enums

45
推荐指数
4
解决办法
2万
查看次数

大于或等于今天在MVC3中的日期验证注释

有没有人看过日期验证的MVC3数据注释要求单个选定日期等于或大于当前日期?

如果已经有第三方添加,那也很酷.我已经在使用DataAnnotationsExtensions,但它没有提供我正在寻找的东西.

似乎没有任何关于此的参考.因此,希望有人在我尝试重新发明轮子并编写自己的自定义验证器之前已经解决了这个问题.

我已经尝试Range但需要2个日期,两者都必须是字符串格式的常量,[Range(typeof(DateTime), "1/1/2011", "1/1/2016")]但这没有帮助.DataAnnotationsExtensions Min验证器只接受intdouble


更新已解决

感谢@BuildStarted,这是我最终得到的,它在我的脚本中运行良好的服务器端和现在的客户端


using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;

namespace Web.Models.Validation {

    [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
    public sealed class DateMustBeEqualOrGreaterThanCurrentDateValidation : ValidationAttribute, IClientValidatable {

        private const string DefaultErrorMessage = "Date selected {0} must be on or after today";

        public DateMustBeEqualOrGreaterThanCurrentDateValidation()
            : base(DefaultErrorMessage) {
        }

        public override string FormatErrorMessage(string name) {
            return string.Format(DefaultErrorMessage, name);
        }  

        protected override ValidationResult IsValid(object …
Run Code Online (Sandbox Code Playgroud)

datetime data-annotations asp.net-mvc-3

25
推荐指数
2
解决办法
4万
查看次数

SQL Server 2008日志不会截断

我认为自己是一个非常有经验的SQL人.但我没有做这两件事:

  • 减小分配日志的大小.
  • 截断日志.

    DBCC sqlperf(logspace)

收益:

Database Name   Log Size (MB)   Log Space Used (%)  Status
ByBox       1964.25     30.0657         0
Run Code Online (Sandbox Code Playgroud)

以下内容不适用于SQL 2008

DUMP TRANSACTION ByBox WITH TRUNCATE_ONLY
Run Code Online (Sandbox Code Playgroud)

运行以下操作也没有任何作用

DBCC SHRINKFILE ('ByBox_1_Log' , 1)
DBCC shrinkdatabase(N'bybox')
Run Code Online (Sandbox Code Playgroud)

我试过备份了.我也试过设置数据库的属性 - '恢复模型'为'FULL'和'SIMPLE'以及上述所有内容的组合.我还尝试将兼容性设置为SQL Server 2005(我使用此设置,因为我想匹配我们的生产服务器)和SQL Server 2008.

无论我尝试什么,日志仍然是1964.25 MB,使用30%,这仍然在增长.

我希望日志能够回到0%附近并将日志文件大小减少到100 MB,这就足够了.我的数据库必须恨我; 它只是忽略了我要求它做的关于日志的一切.

还有一点需要注意 生产数据库有很多复制表,当我使用以下内容在开发框上执行恢复时,我关闭了这些表:

-- Clear out pending replication stuff
exec sp_removedbreplication
go
EXEC sp_repldone @xactid = NULL, @xact_segno = NULL,
     @numtrans = 0, @time = 0, @reset = 1
go
Run Code Online (Sandbox Code Playgroud)

试:

SELECT log_reuse_wait, log_reuse_wait_desc …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2008

21
推荐指数
6
解决办法
8万
查看次数

一般的单身人士

对于一般的单身人士,你们对此有何看法?

using System;
using System.Reflection;

// Use like this
/*
public class Highlander : Singleton<Highlander>
{
    private Highlander()
    {
        Console.WriteLine("There can be only one...");
    }
}
*/

public class Singleton<T> where T : class
{
    private static T instance;
    private static object initLock = new object();

    public static T GetInstance()
    {
        if (instance == null)
        {
            CreateInstance();
        }

        return instance;
    }

    private static void CreateInstance()
    {
        lock (initLock)
        {
            if (instance == null)
            {
                Type t = typeof(T);

                // Ensure …
Run Code Online (Sandbox Code Playgroud)

c# generics singleton

19
推荐指数
4
解决办法
2万
查看次数

惊人的SQL速度提升

我刚刚发现以下两个select语句之间的执行计划性能大不相同:

select * from your_large_table
where LEFT(some_string_field, 4) = '2505'

select * from your_large_table
where some_string_field like '2505%'
Run Code Online (Sandbox Code Playgroud)

执行计划分别为98%和2%.然后速度有点不同.当我看到它时,我真的很震惊.

因为它读得很好所以我总是完成LEFT(xxx)='yyy'.我实际上通过检查LINQ生成的SQL来反对我手工制作的SQL来找到它.我假设LIKE命令会更慢,但实际上要快得多.

我的问题是为什么LEFT()慢于LIKE'%..'.它们完全一样吗?

另外,使用LEFT()会导致CPU命中吗?

sql performance

13
推荐指数
3
解决办法
3001
查看次数

实体框架6.1.3将外键映射到非主键

目标是使用GravityZone中的所有字段以及来自Zone表的区域名称的API.我已经尝试了以下代码的几种排列而没有成功.它目前为区域提供null,我希望将该名称作为字符串或对象的一部分.我正在使用我无法修改的现有表.

楷模:

public partial class Zone
{
    [Key]
    [Column("ZONE_ID")]
    public decimal ZoneId { get; set; }

    [Column("ZONE_CODE")]
    public decimal ZoneCode { get; set; }

    [Column("ZONE_NAME")]
    public string ZoneName { get; set; }

    public virtual ICollection<GravityZone> GravityZones { get; set; }
}

public partial class GravityZone
{
    [Key]
    [Column("GRAVITY_ID")]
    public decimal GravityZoneId { get; set; }

    [Column("ZONE_CODE")]
    public decimal ZoneCode { get; set; }

    [Column("ELEVATION")]
    public decimal Elevation { get; set; }

    [Column("REMARK")]
    [StringLength(2000)]
    public string Remark { get; set; } …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework-6

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

如何在.NET 6集成测试中使用AddInMemoryCollection?

关于如何开发 .NET 6 集成测试的文档。从逻辑上讲,我想通过更改配置参数来模拟外部依赖项(通常是引用某些外部系统而不是WireMock 服务器的url )。这可以通过名为AddInMemoryCollection的方法来完成。我在为 .NET 5 开发集成测试时一直在使用它。但是对于 .NET 6 应用程序(通常是没有 Startup 类的应用程序),我没有成功。

问题是我需要找到一种调用方法CreateClient,然后确保在调用代码AddInMemoryCollection之前调用Program.cs,以便在使用配置参数之前修改它们。我该怎么做呢?如何在.NET 6集成测试中正确使用AddInMemoryCollection?

这是一个不起作用的例子。AddInmemoryCollection不修改appsettings值。使用.NET 5这样的代码可以工作(但我只是参考启动)。

        [Fact]
        public void ActualTest()
        {
            TryAddInMemoryCollection("http://localhost:1234");
        }

        private void TryAddInMemoryCollection(string urlOnLocalhost)
        {
            var factory = new IntegrationWebApplicationFactory<Program>();
            factory.WithWebHostBuilder(whb =>
            {
                whb.ConfigureAppConfiguration((context, configbuilder) =>
                {
                    configbuilder.AddInMemoryCollection(new Dictionary<string, string>()
                     {
                         { "Google",urlOnLocalhost }
                     });
                });
            }).CreateClient();
        }
Run Code Online (Sandbox Code Playgroud)

在我的 Program.cs 中

    var googleLocation = builder.Configuration["Google"];
    Console.WriteLine($"GOOGLELOCATION!! {googleLocation}");
Run Code Online (Sandbox Code Playgroud)

tdd integration-testing asp.net-core .net-6.0

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

超线程是否导致系统不稳定?

我正在用新的Intel I7四核处理器构建一台PC.启用超线程后,它将在任务管理器中报告8个核心.

我的一些同事说,超线程会使系统不可靠,并建议将其关闭.

任何一个好人都可以启发我和其余的stockoverflow用户.

接下来:我一直在使用超线程,并且它一直在使用.没有任何不稳定性.我正在使用:

  • Microsoft Server 2008 64位
  • Microsoft SQL Server 2008 64位
  • Microsoft Visual Studio 2008
  • Diskeeper服务器
  • 大量控制(Telerik,Dundas,Rebex,Resharper)

intel hyperthreading

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

如何在 C# 中比较 SQL Server CDC LSN 值?

在 SQL 中,它很简单,因为它支持二进制 (10) LSN 值进行比较:

SELECT *, __$start_lsn, __$seqval
FROM cdc.fn_cdc_get_all_changes_dbo_sometable(@startLsn, @endLsn, 'all update old') 
WHERE __$seqval > @seqval 
ORDER BY __$start_lsn, __$seqval
Run Code Online (Sandbox Code Playgroud)

在 C# 中则更困难:

byte[] mySeqval = ...
foreach(var row in cdcData)
{
    if(row.seqval > mySeqval) // Cannot perform this
        ...
}
Run Code Online (Sandbox Code Playgroud)

LSN / SeqVal 值可以转换为可以轻松比较的数字吗?它们的大小为 10 字节(80 位)。

我的项目是.Net 3.5

c# change-data-capture sql-server-2008

3
推荐指数
1
解决办法
3647
查看次数

为什么LIKE不返回末尾带有'%'的变量的行?

我在Microsoft SQL Server上发现这很奇怪:

SELECT * FROM deliveries WHERE code LIKE '01999195000%'
-- 9 rows returned. Works.

DECLARE @a VARCHAR(10)
SET @a='01999195000%'
SELECT * FROM deliveries WHERE code LIKE @a
-- 0 rows returned? Why not?

SET @a = '01999195000'
SELECT * FROM deliveries WHERE code LIKE @a + '%'
-- 9 rows returned. Works.
Run Code Online (Sandbox Code Playgroud)

搜索包含%字符的@a和没有添加'%'的@a之间有什么不同?

如果你们中的任何一个SQL Guru可以分享你的想法,那就太好了.

sql sql-server like-keyword sql-like

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