Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Linq和x2B进行有效验证;系统数据实体_C#_Linq_Validation_Logging - Fatal编程技术网

C# 使用Linq和x2B进行有效验证;系统数据实体

C# 使用Linq和x2B进行有效验证;系统数据实体,c#,linq,validation,logging,C#,Linq,Validation,Logging,我正在从事一个Discord.Net项目,我正试图找到一种更有效地记录日志的方法,因为我这样做感觉有点过头了 我正在考虑的两个方法示例: var channel = new Channel(); try { channel = database.Channels.Where( c => c.ChannelId == channelId) .Include(

我正在从事一个Discord.Net项目,我正试图找到一种更有效地记录日志的方法,因为我这样做感觉有点过头了

我正在考虑的两个方法示例:

        var channel = new Channel();
        try
        {
            channel = database.Channels.Where(
                c => c.ChannelId == channelId)
                .Include(c => c.Server).Single();
        }
        catch(Exception exception)
        {
            Logger.Log(LogSeverity.Error, 
                 $"{ClassName}/{MethodName} - {exception.Message}");
            return;
        }
而且

        var channel = database.Channels.Where(
            c => c.ChannelId == channelId)
            .Include(c => c.Server).ToList();

        if(channel.Count == 0)
        {
            Logger.Log(LogSeverity.Error, 
                "No channel found when attemtping to log a message.");
            return;
        }
        if(channel.Count > 1)
        {
            Logger.Log(LogSeverity.Critical, 
                "Multiple channels found when attemtping to log a message");
            return;
        }

对于这类事情,我非常感谢您提供任何提示和建议:D

使用
或default
方法进行
第一次
单次

var channel = database.Channels
    .Include(c => c.Server)
    .SingleOrDefault(c => c.ChannelId == channelId);

if (channel == null)
{
  Logger.Log(LogSeverity.Error, $"{ClassName}/{MethodName} - No model found");
  return;
}

我还删除了
try/catch
,因为如果出现异常,应该传播它。如果您的关系数据模型有效,那么如果您在
Id
上进行筛选,则Single不应返回超过1的值。如果您没有在
Id
上进行筛选,并且您只希望得到一个约束,那么您应该添加一个约束(如唯一索引),以确保持久数据不会变得无效。

如果这是一个关于您的日志记录应该有多广泛的问题,那么实际上是关于您的应用程序的个人品味和要求。日志记录应该足够详细,以查明哪里出了问题,但也应该足够通用,以避免代码混乱。。。但同样的:个人品味。我有一个想法,我想与它有多广泛。但是觉得每次与数据库的交互都要做两个验证语句太多了。我试图将其简化为一个验证类(传入一个“EFModel”的实例,而不是单个模型(例如用户或通道))。一次和多次检查。所以我可以使用验证。例如,单(通道)。您在两种方法中记录了不同的内容,因此我们无法真正比较它们。即使如此,这主要是基于观点的。太棒了,谢谢你!我以前试着做类似的事情,但是我没有得到一个空值。我真的不希望有多个。。但如果有,它将使应用程序崩溃,这并不是真正需要的。例如,有一个错误,由于数据库中已经存在的用户检查失败,因此可以再次添加用户。后来在检索用户时,应用程序崩溃了。@Panda-
有一个错误,由于数据库中已经存在的用户检查失败,因此可以再次添加该用户。