解決Entity Framework中自增主鍵的問題
Entity Framework中自增主鍵問題
當(dāng)實體類中有int類型的字段,并且該字段對應(yīng)數(shù)據(jù)庫中的主鍵,那么Entity Framework會自動將該字段設(shè)為自動增長。
若此時數(shù)據(jù)庫中對應(yīng)的主鍵并非是自動增長的,則在插入數(shù)據(jù)時會出現(xiàn)異常。
舉個例子:
若有如下實體類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會將實體類Test的Id字段設(shè)為自動增長的,而此時表Test中的主鍵Id并沒有設(shè)為自動增長。若此時向數(shù)據(jù)表Test插入數(shù)據(jù)則會出現(xiàn)異常。
Mysql數(shù)據(jù)庫雖然會插入成功,但插入數(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
在實體類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é)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
C#優(yōu)化if...else代碼的方案總結(jié)
在編寫代碼實現(xiàn)業(yè)務(wù)需求過程中,會使用到大量的if...else 判斷語句,隨業(yè)務(wù)復(fù)雜程度不同,導(dǎo)致判斷語句出現(xiàn)多層嵌套、多分支等情況,導(dǎo)致代碼可讀性變差、增加維護(hù)難度,本文介紹了C# 如何優(yōu)化 if...else 讓代碼優(yōu)雅起來,需要的朋友可以參考下2024-06-06
C#裝飾器模式(Decorator Pattern)實例教程
這篇文章主要介紹了C#裝飾器模式(Decorator Pattern),以一個完整實例形式講述了C#裝飾器模式的實現(xiàn)過程,有助于深入理解C#程序設(shè)計思想,需要的朋友可以參考下2014-09-09
C#如何利用結(jié)構(gòu)體對固定格式數(shù)據(jù)進(jìn)行解析
這篇文章主要為大家詳細(xì)介紹了C#利用結(jié)構(gòu)體對固定格式數(shù)據(jù)進(jìn)行解析,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01
將ocx文件轉(zhuǎn)換成C#程序引用的DLL文件的辦法
將ocx文件轉(zhuǎn)換成C#程序引用的DLL文件的辦法,需要的朋友可以參考一下2013-03-03
結(jié)合.net框架在C#派生類中觸發(fā)基類事件及實現(xiàn)接口事件
這篇文章主要介紹了結(jié)合.net框架在C#派生類中觸發(fā)基類事件及實現(xiàn)接口事件,示例的事件編程中包括接口和類的繼承等面向?qū)ο蟮幕A(chǔ)知識,需要的朋友可以參考下2016-02-02

