使用Linq + System.Data.Entity进行有效验证

时间:2018-08-11 11:10:16

标签: c# linq validation logging

我正在研究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

1 个答案:

答案 0 :(得分:0)

#Y Axis name y <- list( title = "Temperature (°C)", titlefont = f) OrDefault使用First方法。

Single

我还删除了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上进行过滤时,Single永远不会返回大于1的值。如果您不是在Id上进行过滤,而只希望得到一个过滤条件,则应添加一个约束(如唯一索引)以确保持久化数据不会变为无效。