Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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# 在.NETCore2.0+;SQLite EFCore,并发检查不适用于';删除'; 我首先创建了SQLite数据库,其中包含所有表 然后,我使用PackageManager控制台中的scaffoldDBContext命令生成了DbContext和模型类(用于表) 我使用了一列作为时间戳,并创建了一个SQLite触发器,在insert和update ops之后对其进行更新。DATETIME列实际上在SQLite中创建为文本,但这不是问题所在 在模型类中,我用[ConcurrencyCheck]和[DatabaseGenerated(DatabaseGeneratedOption.Computed)]属性修饰了相应的属性(用于DATETIME列) 现在,在通过ASP.Net Core RazorPages测试CRUD ops时,我打开了一个(浏览器)选项卡进行编辑,另一个用于删除 我在编辑页面中修改行内容并将其保存-按预期工作 现在我转到已经打开的删除页面(显示的内容已经过时,因为它在编辑页面中被修改过,就在前面),并尝试删除它 记录已成功删除,而我预期会出现并发异常_C#_Entity Framework_Sqlite_Asp.net Core_Optimistic Concurrency - Fatal编程技术网

C# 在.NETCore2.0+;SQLite EFCore,并发检查不适用于';删除'; 我首先创建了SQLite数据库,其中包含所有表 然后,我使用PackageManager控制台中的scaffoldDBContext命令生成了DbContext和模型类(用于表) 我使用了一列作为时间戳,并创建了一个SQLite触发器,在insert和update ops之后对其进行更新。DATETIME列实际上在SQLite中创建为文本,但这不是问题所在 在模型类中,我用[ConcurrencyCheck]和[DatabaseGenerated(DatabaseGeneratedOption.Computed)]属性修饰了相应的属性(用于DATETIME列) 现在,在通过ASP.Net Core RazorPages测试CRUD ops时,我打开了一个(浏览器)选项卡进行编辑,另一个用于删除 我在编辑页面中修改行内容并将其保存-按预期工作 现在我转到已经打开的删除页面(显示的内容已经过时,因为它在编辑页面中被修改过,就在前面),并尝试删除它 记录已成功删除,而我预期会出现并发异常

C# 在.NETCore2.0+;SQLite EFCore,并发检查不适用于';删除'; 我首先创建了SQLite数据库,其中包含所有表 然后,我使用PackageManager控制台中的scaffoldDBContext命令生成了DbContext和模型类(用于表) 我使用了一列作为时间戳,并创建了一个SQLite触发器,在insert和update ops之后对其进行更新。DATETIME列实际上在SQLite中创建为文本,但这不是问题所在 在模型类中,我用[ConcurrencyCheck]和[DatabaseGenerated(DatabaseGeneratedOption.Computed)]属性修饰了相应的属性(用于DATETIME列) 现在,在通过ASP.Net Core RazorPages测试CRUD ops时,我打开了一个(浏览器)选项卡进行编辑,另一个用于删除 我在编辑页面中修改行内容并将其保存-按预期工作 现在我转到已经打开的删除页面(显示的内容已经过时,因为它在编辑页面中被修改过,就在前面),并尝试删除它 记录已成功删除,而我预期会出现并发异常,c#,entity-framework,sqlite,asp.net-core,optimistic-concurrency,C#,Entity Framework,Sqlite,Asp.net Core,Optimistic Concurrency,为什么会这样?我错过了什么重要的东西吗?提前感谢您的帮助/建议。顺便说一句,我在Windows 10 Pro x64 Build 1709(含最新更新)和.Net Core 2.1.104上使用Visual Studio 2017 Community 15.6.7(最新版本) 问候,, 瓦桑 我的代码中的一些附加信息 我的表格模型类: [Table("Client_Tags")] public partial class ClientTags { [Key] [Column("I

为什么会这样?我错过了什么重要的东西吗?提前感谢您的帮助/建议。顺便说一句,我在Windows 10 Pro x64 Build 1709(含最新更新)和.Net Core 2.1.104上使用Visual Studio 2017 Community 15.6.7(最新版本)

问候,, 瓦桑

我的代码中的一些附加信息 我的表格模型类:

[Table("Client_Tags")]
public partial class ClientTags
{
    [Key]
    [Column("ID")]
    [Display(Name = "Row ID")]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long Id { get; set; }

    [Required]
    [Column("Client_ID", TypeName = "VARCHAR(255)")]
    [Display(Name = "Client ID")]
    public string ClientId { get; set; }

    [Required]
    [Column("Tag_Name", TypeName = "VARCHAR(255)")]
    [Display(Name = "Tag")]
    public string TagName { get; set; }

    [Column("Last_Updated", TypeName = "DATETIME")]
    [Display(Name = "Last Updated Time")]
    [ConcurrencyCheck]
    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    public string LastUpdated { get; set; }

}
my DbContext.OnModelCreating()方法的代码段:

modelBuilder.Entity(Entity=>
{
entity.HasIndex(e=>new{e.ClientId,e.TagName})
.IsUnique();
});
my Delete.cshtml中的代码段:

<form method="post">
    <input type="hidden" asp-for="ClientTag.Id" />
    <input type="hidden" asp-for="ClientTag.LastUpdated" />"
    <input type="submit" value="Delete" class="btn btn-default" /> |
    <a asp-page="./Index">Back to List</a>
</form>

"
|
返回列表
my Delete.cshtml.cs中的代码段:

    public async Task<IActionResult> OnPostAsync(long? id)
    {
        if (id == null)
        {
            return NotFound();
        }
        ErrMsg throwErrMsg = () =>
        {
            ModelState.AddModelError(
                    string.Empty,
                    "Error updating the values.  Try again later"
                );
            return Page();
        };

        ClientTag = await _context.ClientTags.FindAsync(id);
        if (ClientTag == null)
        {
            return throwErrMsg();
        }

        try
        {
            _context.ClientTags.Remove(ClientTag);
            await _context.SaveChangesAsync();
        }
        catch (DbUpdateConcurrencyException e)
        {
            return throwErrMsg();
        }

        return RedirectToPage("./Index");
    }
公共异步任务OnPostAsync(长?id) { if(id==null) { 返回NotFound(); } ErrMsg throwErrMsg=()=> { ModelState.AddModelError( 字符串。空, “更新值时出错。请稍后重试” ); 返回页(); }; ClientTag=wait_context.ClientTags.FindAsync(id); if(ClientTag==null) { 回程抛掷器rmsg(); } 尝试 { _context.ClientTags.Remove(ClientTag); wait_context.SaveChangesAsync(); } catch(dbupdateconcurrency异常) { 回程抛掷器rmsg(); } 返回页首(“/索引”); }
-x-x-x-

此问题在此实体框架核心上引用。该问题通过一个工作示例标记为已关闭(因为没有提供更多反馈)

您可能还想查看完整的实现,并与您的实现进行比较

    public async Task<IActionResult> OnPostAsync(long? id)
    {
        if (id == null)
        {
            return NotFound();
        }
        ErrMsg throwErrMsg = () =>
        {
            ModelState.AddModelError(
                    string.Empty,
                    "Error updating the values.  Try again later"
                );
            return Page();
        };

        ClientTag = await _context.ClientTags.FindAsync(id);
        if (ClientTag == null)
        {
            return throwErrMsg();
        }

        try
        {
            _context.ClientTags.Remove(ClientTag);
            await _context.SaveChangesAsync();
        }
        catch (DbUpdateConcurrencyException e)
        {
            return throwErrMsg();
        }

        return RedirectToPage("./Index");
    }