解決Entity Framework中自增主鍵的問題
Entity Framework中自增主鍵問題
當(dāng)實(shí)體類中有int類型的字段,并且該字段對(duì)應(yīng)數(shù)據(jù)庫中的主鍵,那么Entity Framework會(huì)自動(dòng)將該字段設(shè)為自動(dòng)增長。
若此時(shí)數(shù)據(jù)庫中對(duì)應(yīng)的主鍵并非是自動(dòng)增長的,則在插入數(shù)據(jù)時(shí)會(huì)出現(xiàn)異常。
舉個(gè)例子:
若有如下實(shí)體類Test和數(shù)據(jù)庫表Test。
public class Test { public int Id { get; set; } public string Name { get; set; } }
create table Test( Id int primary key, Name varchar(20) );
Entity Framework會(huì)將實(shí)體類Test的Id字段設(shè)為自動(dòng)增長的,而此時(shí)表Test中的主鍵Id并沒有設(shè)為自動(dòng)增長。若此時(shí)向數(shù)據(jù)表Test插入數(shù)據(jù)則會(huì)出現(xiàn)異常。
Mysql數(shù)據(jù)庫雖然會(huì)插入成功,但插入數(shù)據(jù)的Id為始終0。而SqlServer則直接出現(xiàn)異常,無法插入。
解決辦法1
將數(shù)據(jù)表中的Id設(shè)為自增
create table Test( Id int primary key auto_increment, Name varchar(20) );
解決辦法2
在實(shí)體類Test的Id字段添加注解
using System.ComponentModel.DataAnnotations.Schema public class Test { [DatabaseGenerated(DatabaseGeneratedOption.None)] public int Id { get; set; } public string Name { get; set; } }
解決辦法3
在相應(yīng)的DbContext中添加
protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<Test>().Property(p => p.ID) .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); }
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Unity接入百度AI實(shí)現(xiàn)果蔬識(shí)別
本文將介紹如何利用Unity接入百度AI從而實(shí)現(xiàn)果蔬識(shí)別,可以做到識(shí)別近千種水果和蔬菜的名稱,可自定義返回識(shí)別結(jié)果數(shù)。感興趣的小伙伴可以了解一下2022-02-02C#優(yōu)化if...else代碼的方案總結(jié)
在編寫代碼實(shí)現(xiàn)業(yè)務(wù)需求過程中,會(huì)使用到大量的if...else 判斷語句,隨業(yè)務(wù)復(fù)雜程度不同,導(dǎo)致判斷語句出現(xiàn)多層嵌套、多分支等情況,導(dǎo)致代碼可讀性變差、增加維護(hù)難度,本文介紹了C# 如何優(yōu)化 if...else 讓代碼優(yōu)雅起來,需要的朋友可以參考下2024-06-06C#裝飾器模式(Decorator Pattern)實(shí)例教程
這篇文章主要介紹了C#裝飾器模式(Decorator Pattern),以一個(gè)完整實(shí)例形式講述了C#裝飾器模式的實(shí)現(xiàn)過程,有助于深入理解C#程序設(shè)計(jì)思想,需要的朋友可以參考下2014-09-09C#如何利用結(jié)構(gòu)體對(duì)固定格式數(shù)據(jù)進(jìn)行解析
這篇文章主要為大家詳細(xì)介紹了C#利用結(jié)構(gòu)體對(duì)固定格式數(shù)據(jù)進(jìn)行解析,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01將ocx文件轉(zhuǎn)換成C#程序引用的DLL文件的辦法
將ocx文件轉(zhuǎn)換成C#程序引用的DLL文件的辦法,需要的朋友可以參考一下2013-03-03結(jié)合.net框架在C#派生類中觸發(fā)基類事件及實(shí)現(xiàn)接口事件
這篇文章主要介紹了結(jié)合.net框架在C#派生類中觸發(fā)基類事件及實(shí)現(xiàn)接口事件,示例的事件編程中包括接口和類的繼承等面向?qū)ο蟮幕A(chǔ)知識(shí),需要的朋友可以參考下2016-02-02