Jak*_*cas 13 c# entity-framework-4
我们有一个名为'Sites'的表的数据库这个表有列,SiteID,Name,Tags,Description,URI,SiteID是主键(它没有设置为Identity,因为我们想添加自己的ID)
我们一直在使用.NET 4.0 MVC和C#,并在我们需要的代码中设置了所有内容.我们可以从数据库中选择并显示它们,以便我们知道它正在运行.但是当我们尝试插入时,我们会收到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; }
}
Run Code Online (Sandbox Code Playgroud)
CMSModels
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; }
}
Run Code Online (Sandbox Code Playgroud)
HomeController的:
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());
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么我会收到这个错误,所以任何想法都会受到赞赏.
如果您需要查看任何其他代码,请告诉我.
编辑:
只是为了扩展这个问题,似乎这只发生在int类型的主键上.
如果我们将数据库列数据类型设置为nvarchar并且将代码中的数据类型设置为字符串,则它可以正常工作.
这只是Entity Framework 4中的一个错误,还是我们只是做错了什么?
如果我们找不到将ints插入主键列的方法,我们可能只需要使用字符串并验证它们以确保它们是数字.
dkn*_*ack 27
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; }
}
Run Code Online (Sandbox Code Playgroud)
DbContext. 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);
}
}
Run Code Online (Sandbox Code Playgroud)