c# - 无法使用代码 C# 中的 linq 将具有整数值的新记录添加到数据库中
问题描述
我正在尝试构建一个简单的 ASP.NET MVC 网站,但遇到了一些问题。我无法使用 linq 命令将具有整数值的新记录添加到数据库中。我在数据库中有一个名为“组”的表。如下:groups([int] [primary key] MaNhom, [char(100)] TenNhom)。说明:MaNhom 是 GroupID,TenNhom 是 GroupName。(对不起,当我用越南语命名这些字段时,为方便起见。)。我添加了一个 ADO.NET 实体数据模型并生成了一个名为“group.cs”的类。
public partial class group
{
[Key]
public int MaNhom { get; set; }
public string TenNhom { get; set; }
}
}
我还在我的 Web 项目的 Models 文件夹中创建了一个名为 Group 的类。
public class Group
{
[Key]
public int MaNhom { get; set; }
public string TenNhom { get; set; }
}
我创建了一个名为 CreateManageGroup.cshtml 的视图。它的内容如下:
@{
ViewBag.Title = "CreateManageGroup";
}
<h2>Create A Group</h2>
<form action="/account/CreateManageGroup" method="post">
<label for="TenNhom"> Name of Group </label>
<input type="text" name="TenNhom" id="inputGroupName">
<input type="submit" value="Create">
</form>
当我提交它时,TenNhom 的值将被发送并保存在 AccountController 中方法 CreateManageGroup(Group group) 的参数“组”中。
[HttpPost]
public ActionResult CreateManageGroup(Group group)
{
if (ModelState.IsValid == true)
{
var newGroup = new DataAccess.group();
newGroup.TenNhom = group.TenNhom;
var randomObject = new Random();
do
{
newGroup.MaNhom = randomObject.Next(1, 9999);
}
while (DataAccess.Queries.CheckExistInGroup(newGroup.MaNhom) == true);
DataAccess.Queries.ExcuteInsertIntoGroup(newGroup);
return RedirectToAction("SignUp");
}
else
{
return View();
}
}
我查了一下,我知道newGroup.MaNhom在随机化后设置了一个不同的零值,比如3309。但是调用ExcuteInsertIntoGroup(newGroup)方法后,数据库中表组的MaNhom值为0。ExcuteInsertIntoGroup()的内容:
namespace DataAccess
{
public class Queries
{
public static void ExcuteInsertIntoGroup(group record)
{
phep_toanDatabase.groups.Add(record);
phep_toanDatabase.SaveChanges();
}
}
}
注意:phep_toanDatabase 是类库 DataAccess 的类 Queries 中声明的变量:
public static phep_toanEntities phep_toanDatabase;
static DataAccess()
{
phep_toanDatabase = new phep_toanEntities();
}
我的问题是:为什么在执行 linq 命令后,MaNhom 的值在表组中显示为 0,尽管 newGroup.MaNhom 之前设置为不同的 0?谢谢!
解决方案
实际上,在发表我的评论后,我有点脑波,最终可能会回答你的问题。这是一个理论:
你提到你的表定义如下:
CREATE TABLE groups(
MaNhom INT primary key,
TenNhom CHAR(100)
);
产生一个实体,用[Key]
属性正确装饰:
public partial class group
{
[Key]
public int MaNhom { get; set; }
public string TenNhom { get; set; }
}
}
我怀疑当您调用 EF 的 .SaveChanges() 时会发生什么,MaNhom
假设数据库会处理它,它会完全忽略值 id。然而,在 MySQL 中,除非您告诉它,否则 PK 不会自动递增。这是您需要的地方:
1.更新表:
CREATE TABLE groups(
MaNhom INT AUTO_INCREMENT PRIMARY KEY,
TenNhom CHAR(100)
);
2.更新模型:
这个 SO answer提供了一些指导:
public partial class group
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int MaNhom { get; set; }
public string TenNhom { get; set; }
}
}
推荐阅读
- fetch-api - 如何在 Dialogflow GUI 上使用 fetch 显示 API 数据
- python - google.cloud.storage 允许访问,但 gcsfs 不允许
- python - 如何使用硒刮取新的弹出窗口?
- javascript - 我将如何显示具有自动容器“框架”的图像,但有一些隐藏的超额?
- google-sheets - 日期戳上的 ARRAYFORMULA 到 SUMIF
- docker - 在连接到本地数据库的 docker 容器中运行 alembic
- java - 如何从带有拆分的文本文件中输出特定的列/值?
- javascript - 将下拉列表反应到 API 中的 POST 值
- powershell - PowerShell:“未找到位置参数”
- postgresql - 仅在重新加载 Spring Boot 应用程序后更改 PostgreSQL 模式才处于活动状态