C# 使用Linq和x2B进行有效验证;系统数据实体
我正在从事一个Discord.Net项目,我正试图找到一种更有效地记录日志的方法,因为我这样做感觉有点过头了 我正在考虑的两个方法示例: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(
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-有一个错误,由于数据库中已经存在的用户检查失败,因此可以再次添加该用户。