簡體   English   中英

C# .NET 4.0 MVC 使用主鍵插入記錄

[英]C# .NET 4.0 MVC Inserting a record with primary key

我們有一個數據庫,其中包含一個名為“Sites”的表,該表具有列、SiteID、Name、Tags、Description、URI,其中 SiteID 是主鍵(它沒有設置為 Identity,因為我們想添加自己的 ID)

我們一直在使用 .NET 4.0 MVC 和 C# 並在我們需要的代碼中設置了所有內容。 我們可以 select 數據庫中的東西並顯示它們,以便我們知道這是有效的。 但是當我們嘗試插入時,我們得到一個Cannot insert the value NULL into column 'SiteID'錯誤。

如果我將該列設置為 Identity 以便它自動生成,或者如果我取消主鍵,那很好,但正如我所說,它應該是一個主鍵,我們想要插入自己的 ID。

我的代碼如下(我們在SaveChanges()上收到錯誤,但已在調試器中檢查,並且 SiteID 肯定被分配了一個 int)

網站

public class Sites
{
    [Key]
    public int SiteID { get; set; }
    public string Name { get; set; }
    public string Tags { get; set; }
    public string Description { get; set; }
    public string URI { get; set; }
}

CMS模型

public class CMSModels : DbContext
{
//public DbSet<ContentTypeModel> ContentType { get; set; }
    //public DbSet<LayoutModel> Layout { get; set; }
    //public DbSet<PageModel> Page { get; set; }
    //public DbSet<PageZoneModel> PageZone { get; set; }
    public DbSet<Sites> Site { get; set; }
    //public DbSet<ZoneContentModel> ZoneContent { get; set; }
    //public DbSet<ZoneTypeModel> ZoneType { get; set; }
}

家庭控制器:

private CMSModels models = new CMSModels();

public ActionResult Index()
{
    Sites site = new Sites { SiteID = 4, Name = "Name", Description = "Desc", Tags = "", URI = "" };

    models.Site.Add(site);
    models.SaveChanges();

    return View(models.Site.ToList());
}

我不明白為什么我會收到這個錯誤,所以任何想法都會受到贊賞。

如果您需要查看任何其他代碼,請告訴我。

編輯:

只是為了稍微擴展這個問題,似乎這只發生在 int 類型的主鍵上。

如果我們將數據庫列數據類型設置為 nvarchar 並將代碼中的數據類型設置為字符串,則它可以正常工作。

這只是 Entity Framework 4 中的一個錯誤,還是我們只是做錯了什么?

如果我們找不到將整數插入主鍵列的方法,我們可能只需要改用字符串並驗證它們以確保它們是數字的。

如果您想要一個 NO IDENTITY 主鍵列,因此您手動設置 id,您有兩種可能的解決方案。

1. 使用以下屬性(DatabaseGenerated...)裝飾您的 id 屬性。

    public class Sites
    {
        [Required, Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
        public int SiteID { get; set; }
        public string Name { get; set; }
        public string Tags { get; set; }
        public string Description { get; set; }
        public string URI { get; set; }
    }

2. 使用DbContext中的 ModelBuilder 進行操作。

    public class CMSModels : DbContext
    {
      //public DbSet<ContentTypeModel> ContentType { get; set; }
      //public DbSet<LayoutModel> Layout { get; set; }
      //public DbSet<PageModel> Page { get; set; }
      //public DbSet<PageZoneModel> PageZone { get; set; }
      public DbSet<Sites> Site { get; set; }
      //public DbSet<ZoneContentModel> ZoneContent { get; set; }
      //public DbSet<ZoneTypeModel> ZoneType { get; set; }

      protected override void OnModelCreating(ModelBuilder modelBuilder)
      {
          base.OnModelCreating(modelBuilder);
          modelBuilder.Entity<Sites>().Property(r => r.SiteID) 
                       .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
      }
    }

我想你可以閱讀這篇文章來理解你的問題並解決它: http://leedumond.com/blog/using-a-guid-as-an-entitykey-in-entity-framework-4/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM