gpt4 book ai didi

asp.net - 使用通过 React GUI 触发的 Entity Framework 向数据库添加新条目时重复条目

转载 作者:搜寻专家 更新时间:2023-10-30 23:26:01 24 4
gpt4 key购买 nike

我继承了 ASP.net/C# 中的一个现有项目,使用 Entity Framework 和代码优先方法。我定义了一个新表并成功完成了所有必要的迁移,因此 [myProject].[ExportFiles] 在数据库中确实作为表可见。

下面的代码工作正常,除了它总是创建双数据库条目。我确定代码只被调用一次,我使用断点进行了检查。假设我的数据库上下文称为 _db

namespace myProject.Service
{
public void Export(int userId)
{
var currentExportTimestamp = DateTime.Now;
var currentUserId = 42;
var exportRecord= new ExportFiles // defining a new entry
{
FileName = cashflowFileName,
DateSubmitted = currentExportTimestamp,
UserId = currentUserId,
};
_db.ExportFiles.Add(exportRecord); // nothing written in DB yet
_db.SaveChanges(); // the entry is written to DB, but twice
};
};

奇怪的是:上面的代码总是写入两条新记录,其中 Ids 递增,尽管它只有一个引用,即 ExportController.cs 大致如下所示:

[Route("api/Export", Order = -1)]
[HttpPost]
public IHttpActionResult Export(int? selectedEntityId, DateTime? selectedDate)
{
var name = System.Web.HttpContext.Current.User.Identity.Name;
var userId = _userService.GetUserByName(name).Id;

if (selectedDate == null || selectedEntityId == null)
{
return BadRequest("Need to select appropriate data");
}
try
{
_export.Export(userId);
return Ok();
}
}

我的调试练习显示这个 Controller 已经被调用了两次,但我不确定为什么。

组件 MyView.tsx 如下所示:

export interface MyViewProps {
selectedDate: any,
selectedEntity: number,
exportStatus: boolean
setExportingStatus: (exportingStatus: boolean) => void;
selectDate: (date: any) => void;
selectEntity: (entityId: number) => void;
exportDispatch: () => void;
}

export class MyView extends React.Component<MyViewProps, any> {
constructor(props) {
super(props);
this.handleExport = this.handleExport.bind(this);
}
handleExport() {
this.props.setExportingStatus(true);
this.props.exportDispatch();
}

render() {
return (
<div>
<Button
type="primary"
onClick={this.handleExport}
disabled={this.props.exportStatus == true}
> Export
</Button>
</div>
);
}
}

需要的额外信息

数据模型如下:

namespace myProject.Entity.Models
{
public class ExportFiles
{
public int Id { get; set; }
public string FileName { get; set; }
public DateTime DateSubmitted { get; set; }
public int UserId { get; set; }
public virtual User User { get; set; }
}
}

currentUserId = 42 确实作为外键存在于表 User 中。

编辑

我发现这个函数实际上被调用了两次,但我不明白为什么。

相关问题

最佳答案

您的代码是正确的,检查 DateSubmitted 值在您的两个重复值中是否相同将告诉您您的记录是否确实被 .SaveChanges() 方法复制,或者您是否只需调用整个方法两次。

编辑:由于您添加了 React 代码,我可以看到您正在注册事件而不需要它,因为您已经通过单击按钮触发了它,所以这个 this.handleExport = this.handleExport.bind(this ); 正在创建重复请求

export class MyView extends React.Component<MyViewProps, any> {
constructor(props) {
super(props);
}
handleExport() {
this.props.setExportingStatus(true);
this.props.exportDispatch();
}

render() {
return (
<div>
<Button
type="primary"
onClick={this.handleExport}
disabled={this.props.exportStatus == true}
> Export
</Button>
</div>
);
}
}

关于asp.net - 使用通过 React GUI 触发的 Entity Framework 向数据库添加新条目时重复条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57728479/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com