【问题标题】:AutoIncrement Issue : The column cannot be modified. [ Column name = UserId ]自动增量问题:无法修改列。 [ 列名 = 用户 ID ]
【发布时间】:2013-07-28 04:49:21
【问题描述】:

我目前正在使用 ASP.NET MVC4 并尝试将新条目添加到以 Integer 作为主键的表中。我知道身份问题并将其设置为 true,我也知道 GUID,但它们用于唯一标识符而不是整数。

我知道我的主键是一个名为 SheetId 的列,因此我在这里添加了一个新行

if (ModelState.IsValid)
{
   var sheet = db.Sheets.Create();
   sheet.Email = Request.Cookies["UserInfo"]["Email"];
   sheet.ApprovedDays = "0000000";
   sheet.DateStarted = DateTime.Now;

   db.Sheets.Add(sheet);

   db.SaveChanges();

   return RedirectToAction("Index", "Home");
}

这是图纸模型

public class Sheet
{
    [Key]
    [Required]
    public int SheetId { get; set; }
    [Required]
    public DateTime StartDate { get; set; }
    [Required]
    public string Email { get; set; }
    public string ApprovedDays { get; set; }
    //
    public virtual UserModel UserModel { get; set; }
    public virtual ICollection<Task> Task { get; set; }
}

这是我得到的例外

异常详细信息:System.Data.SqlServerCe.SqlCeException:无法修改列。 [ 列名 = SheetId ]

【问题讨论】:

  • Sheet 模型对于 SheetId 列的外观如何?
  • 可能 db.Sheets.Create() 会为 SheetId 分配一个值,但数据库除了为空,因此可以自动生成。
  • @Joachim Isaksson:我添加了工作表模型
  • @juhan_h : 在 db.Sheets.Create() 之后 SheetId 的值为 0

标签: c# sql asp.net-mvc-4 sql-server-ce auto-increment


【解决方案1】:

您可以像这样在键上尝试 [DatabaseGenerated(DatabaseGeneratedOption.Identity)] :

[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int SheetId { get; set; }

【讨论】:

    【解决方案2】:

    我已经解决了这个问题,只删除了我的 .EDMX 上下文文件并再次重新创建它,瞧它工作了!! 也感谢你们的努力

    【讨论】:

      【解决方案3】:

      删除键上的[必填];

      [Key]
      public int SheetId { get; set; }
      

      【讨论】:

      • 同样的异常依然存在
      • @Osama 哪个 SQL CE 版本?
      猜你喜欢
      • 2011-09-17
      • 2021-03-03
      • 1970-01-01
      • 2021-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-27
      • 2011-07-16
      相关资源
      最近更新 更多