C#.NET4.0MVC使用主键插入记录Description、URI、SiteID是主键(它没有设置为Identity,因为我们想添加我们自己的ID)我们一直在使用.NET4.0MVC和C#,并在我们需要的地方用代码设置了一切。我们可以从数据库中选择并显示它们,这样我们就知道它正在工作。但是当我们尝试插入时,我们得到一个CannotinsertthevalueNULLintocolumn'SiteID'错误。如果我将列设置为Identity以便它自动生成,或者如果我取下主键则没问题,但正如我所说,它应该是主键,我们想插入我们自己的ID。我的代码如下(我们在SaveChanges()上遇到错误,但已经在调试器中检查过并且SiteID肯定被分配了一个int)SitepublicclassSites{[Key]publicintSiteID{get;放;}}公共字符串标签{get;放;}公共字符串描述{得到;放;}公共字符串URI{得到;放;}}CMSModelspublicclassCMSModels:DbContext{//publicDbSetContentType{}//publicDbSetLayout{get;放;}//publicDbSetPage{get;放;}//publicDbSetPageZone{get;放;}publicDbSetSite{get;放;}//public}//publicDbSetZoneType{get;放;}}HomeController:私有CMSModels模型=newCMSModels();publicActionResultIndex(){Sitessite=newSites{SiteID=4,Name="Name",Description="Desc",Tags="",URI=""};models.Site.Add(站点);模型.SaveChanges();返回视图(models.Site.ToList());我不明白为什么我会收到这个错误,所以任何想法都会受到赞赏。如果您需要查看任何其他代码,请告诉我。编辑:只是为了稍微扩展一下这个问题,这似乎只发生在int类型的主键上。如果我们将数据库列数据类型设置为nvarchar并将代码中的数据类型设置为字符串,那么它就可以正常工作。这只是实体框架4中的错误还是我们只是做错了什么?如果我们找不到将整数插入主键列的方法,我们可能只需要使用字符串并验证它们以确保它们是数字。如果你想要一个NOIDENTITY主键列,所以你手动设置了id,有两种可能的解决方案。1.使用以下属性(DatabaseGenerated...)装饰您的id属性。publicclassSites{[Required,Key,DatabaseGenerated(DatabaseGeneratedOption.None)]publicintSiteID{get;放;}公共字符串名称{得到;放;}公共字符串标签{get;放;}公共字符串描述{得到;放;}公共字符串URI{得到;放;}}2.使用DbContext的ModelBuilder来执行此操作。publicclassCMSModels:DbContext{//publicDbSetContentType{get;放;}//publicDbSetLayout{get;放;}//publicDbSetPage{get;放;}//publicDbSetPageZone{get;放;}}//publicDbSetZoneContent{get;放;}//publicDbSetZoneType{get;放;}protectedoverridevoidOnModelCreating(ModelBuildermodelBuilder){base.OnModelCreating(modelBuilder);modelBuilder.Entity().Property(r=>r.SiteID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);我想你可以在阅读这篇文章的同时理解你的问题并解决它:http://leedumond.com/blog/using-a-guid-as-an-entitykey-in-entity-framework-4/以上是C#学习教程:C#.NET4.0MVC使用主键插入记录分享所有内容。如果对大家有用,需要了解更多关于C#的学习教程,希望大家多多关注—本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
