如何在.net核心中手动添加`DbUpdateConcurrencyException`?

时间:2019-12-15 16:35:47

标签: c# asp.net-core .net-core entity-framework-core

我想在代码中抛出Microsoft.EntityFrameworkCore.DbUpdateConcurrencyException,但是DbUpdateConcurrencyException具有单个构造函数:

public DbUpdateConcurrencyException(
      [NotNullAttribute] string message, 
      [NotNullAttribute] IReadOnlyList<IUpdateEntry> entries)

我在第二个参数中传递了null,但是正如[NotNullAttribute]所说,它不能为null。 在我的try-catch代码中,我只是捕获了DbUpdateConcurrencyException而我不在乎它的属性(Message或...)。

有什么方法可以直接从此类中进行抛出和实例化吗? 我知道我可以创建自定义异常,但我宁愿DbUpdateConcurrencyException。

2 个答案:

答案 0 :(得分:1)

似乎您正在运行EF core 2.2 or below,因为您正在寻找have been introduced in ef core 3.0的重载。因此,一个答案将是升级到EF core 3.0或更高版本,

如果这不是一个选项,则可以在过渡期间定义您的自定义异常(我知道您宁愿避免这种情况,但这可能是最干净的解决方法):

public class MyDbUpdateConcurrencyException : DbUpdateException
{
    public MyDbUpdateConcurrencyException(string message) : base(message, (Exception)null)
    {
    }
}

UPD 正如注释中所指出的,您可以使用当前的EF定位不同版本的.net Core运行时。我只是想指出,由于引入了a few breaking changes,因此升级到EF core 3.0可能很棘手,因此传递一个空列表(如 Erik Philips 所建议的那样)可能是更合适的解决方案根据您的情况。

答案 1 :(得分:0)

只需传入具有空条目的列表即可。

Working DotNetFiddle Example

// @nuget: Microsoft.EntityFrameworkCore -version 2.2
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Update;                 
public class Program
{
    public static void Main()
    {
        throw new DbUpdateConcurrencyException("message"
          , new List<IUpdateEntry> { null }  );
    }
}