[英]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 中的一個錯誤,還是我們只是做錯了什么?
如果我們找不到將整數插入主鍵列的方法,我們可能只需要改用字符串並驗證它們以確保它們是數字的。
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; }
}
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.