首页 > 解决方案 > 无法使用代码 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?谢谢!

标签: c#mysqlasp.net-mvcdatabaselinq

解决方案


实际上,在发表我的评论后,我有点脑波,最终可能会回答你的问题。这是一个理论:

你提到你的表定义如下:

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; }
    }
}

推荐阅读