激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

香港云服务器
服務器之家 - 編程語言 - C# - C#中Entity Framework常見報錯匯總

C#中Entity Framework常見報錯匯總

2022-02-13 15:13C#教程網 C#

給大家總結了C#中Entity Framework常見報錯,以及處理這些錯誤的方法,希望能夠為你提供到幫助。

以下小編整理的entity framework常見錯誤的匯總,大家如果還有不明白可以在下面留言區討論。

1 實體屬性配置為isrequired()對更新的影響

拋出異常類型dbentityvalidationexception

表結構:

C#中Entity Framework常見報錯匯總

實體:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class user
  {
    public int id { get; set; }
    /// <summary>
    /// 賬號
    /// </summary>
    public string account { get; set; }
    /// <summary>
    /// 郵箱
    /// </summary>
    public string email { get; set; }
    /// <summary>
    /// 昵稱
    /// </summary>
    public string nickname { get; set; }
    /// <summary>
    /// 頭像
    /// </summary>
    public string avatarid { get; set; }
    /// <summary>
    /// 記錄插入時間
    /// </summary>
    public datetime inserttime { get; set; }
    /// <summary>
    /// 記錄修改時間
    /// </summary>
    public datetime updatetime { get; set; }
  }

實體配置:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 modelbuilder.entity<user>().property(u => u.account)
  .isrequired()
  .isunicode(false)
  .hasmaxlength(50);
modelbuilder.entity<user>().property(u => u.email)
  .isrequired()
  .isunicode(false)
  .hasmaxlength(100);
modelbuilder.entity<user>().property(u => u.nickname)
  .isunicode(false)
  .hasmaxlength(50);
modelbuilder.entity<user>().property(u => u.avatarid)
  .isoptional()
  .hasmaxlength(100);

customdbcontext繼承自dbcontext

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[dbconfigurationtype(typeof(mysqlefconfiguration))]
  public class customdbcontext : dbcontext
  {
    public customdbcontext()
      : base("name=master")
    {
      
      this.configuration.lazyloadingenabled = false;
      //dropcreatedatabaseifmodelchanges
      //new dropcreatedatabasealways<customdbcontext>()
      database.setinitializer<customdbcontext>(null);
    }
 
    public dbset<user> users { get; set; }
 
    protected override void onmodelcreating(dbmodelbuilder modelbuilder)
    {
      base.onmodelcreating(modelbuilder);
      entityconfiguration.set(modelbuilder);
    }
}

更新操作:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
using (customdbcontext db = new customdbcontext())
{
          user user = new user
          {
            id = 1,
            email = "test@1622.com",
          };
          dbentityentry<user> entry = db.entry<user>(user);
          entry.state = entitystate.unchanged;
          entry.property(t => t.email).ismodified = true;
 
          int num = db.savechanges();
}

執行操作,報錯信息如下:

C#中Entity Framework常見報錯匯總

查看entityvalidationerrors,

只能看到{system.data.entity.validation.dbentityvalidationresult},沒有更詳細的信息。

如果將上述代碼用try..catch包起來,如下寫法:

?
1
2
3
4
5
6
7
8
9
10
11
try
{
//執行代碼
}
catch (dbentityvalidationexception ex)
{
  var e = ex.entityvalidationerrors;
}
catch (exception ex)
{
}

一層一層地打開,看到真正導致異常的原因,看到下面的截圖:

C#中Entity Framework常見報錯匯總

分析實體配置發現,account屬性被設置為isrequired,那么在更新實體的時候,即使不更新這個字段,也要給這個字段賦值,那么賦值后觀察:

更新操作代碼變為

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
using (customdbcontext db = new customdbcontext())
{
  user user = new user
  {
    id = 1,
    email = "test@1622.com",
    account = "a"
  };
  dbentityentry<user> entry = db.entry<user>(user);
  entry.state = entitystate.unchanged;
  entry.property(t => t.email).ismodified = true;
 
  int num = db.savechanges();
}

經過上述調整后,更新成功。

那么換一個思路,將account屬性被設置為isoptional()是不是也可以呢?

修改實體配置,將account屬性設置按如下修改,并注掉上面的account = "a"

modelbuilder.entity<user>().property(u => u.account)

                .isoptional()

                .isunicode(false)

                .hasmaxlength(50);

執行測試,更改成功。

 

得出結論:在實體配置時,指定了為必選的字段,那么更新操作時,構造實例一定要對必選(isrequired())字段賦值。

上述測試中還有一個值得考慮的細節,構造user實例的時候,只對id,email進行了賦值,而沒有對其他屬性進行賦值,那么為什么會成功呢?那么必定是未進行任何設置的實體屬性默認是isoptional()。這跟表結構中的字段類型設置為not null有無關聯呢,從測試結果看就本類應用無必然聯系。

總結:

a.實體配置中指定了實體屬性為isrequired(),更新操作構造類的實例時必對此屬性賦值。

b.不進行配置的實體屬性默認為isoptional()

c.表結構中字段是否為not null對上述規則無影響。

2 更新報錯:

an object with the same key already exists in the objectstatemanager. the objectstatemanager cannot track multiple objects with the same key.

異常類型:system.data.entity.infrastructure.dbupdateconcurrencyexception

實體屬性配置如上例所示。

操作代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using (customdbcontext db = new customdbcontext())
{
  user user = new user
  {
    id = 1,
    email = "test@132.com",
  };
  dbentityentry<user> entry = db.entry<user>(user);
  entry.state = entitystate.unchanged;
  entry.property(t => t.email).ismodified = true;
 
  user user1 = new user
  {
    id = 1,
    email = "test@132.com",
  };
  dbentityentry<user> entry1 = db.entry<user>(user1);
  entry1.state = entitystate.unchanged;
  entry1.property(t => t.email).ismodified = true;
 
  int num = db.savechanges();
}

執行操作

C#中Entity Framework常見報錯匯總

涉及到兩次修改操作,兩次操作構造了兩個實例,但是實例的屬性id有相同的值。

如果兩次操作的是同一個實例,而不是不同的實例,那么不會拋出異常,代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using (customdbcontext db = new customdbcontext())
{
  user user = new user
  {
    id = 1,
    email = "test@132.com",
  };
  dbentityentry<user> entry = db.entry<user>(user);
  entry.state = entitystate.unchanged;
  entry.property(t => t.email).ismodified = true;
 
  dbentityentry<user> entry1 = db.entry<user>(user);
  entry1.state = entitystate.unchanged;
  entry1.property(t => t.email).ismodified = true;
 
  int num = db.savechanges();
}

 

3 未給主鍵賦值或賦給主鍵一個不存在的值,拋出異常

system.data.entity.infrastructure.dbupdateconcurrencyexception

操作代碼如下,其中id=1這條語句被注掉,id是主鍵:

?
1
2
3
4
5
6
7
8
9
10
11
12
using (customdbcontext db = new customdbcontext())
  {
    user user = new user
    {
      //id = 1,
      email = "test@132.com",
    };
    dbentityentry<user> entry = db.entry<user>(user);
    entry.state = entitystate.unchanged;
    entry.property(t => t.email).ismodified = true;
    int num = db.savechanges();
  }

運行上述代碼,拋出異常信息如下,注意異常類型居然是system.data.entity.infrastructure.dbupdateconcurrencyexception,看上去像是并發問題,但實際卻不是!

message:

store update, insert, or delete statement affected an unexpected number of rows (0). entities may have been modified or deleted since entities were loaded. refresh objectstatemanager entries.

C#中Entity Framework常見報錯匯總

賦給主鍵一個不存在的值,令id=4(在數據庫表中不存在id為4的一條記錄)拋出的異常與上面的相同。

4 字段超長拋出異常:system.data.entity.validation.dbentityvalidationexception

表中nickname 字段定義為50個字符,現在賦值超過50。

操作代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
using (customdbcontext db = new customdbcontext())
        {
          user user = new user
          {
            id = 4,
            email = "test@132.com",
            nickname = "testupdateerrortestupdateerrortestupdateerrortestupdateerrortestupdateerrortestupdateerrortestupdateerrortestupdateerrortestupdateerrortestupdateerrortestupdateerror"
          };
          dbentityentry<user> entry = db.entry<user>(user);
          entry.state = entitystate.unchanged;
          entry.property(t => t.email).ismodified = true;
          int num = db.savechanges();
        }

運行程序報錯:C#中Entity Framework常見報錯匯總

一層一層點開,查看具體原因:C#中Entity Framework常見報錯匯總

 

原文鏈接:https://www.cnblogs.com/hdwgxz/p/7897031.html

延伸 · 閱讀

精彩推薦
  • C#WPF 自定義雷達圖開發實例教程

    WPF 自定義雷達圖開發實例教程

    這篇文章主要介紹了WPF 自定義雷達圖開發實例教程,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下...

    WinterFish13112021-12-06
  • C#Unity3D實現虛擬按鈕控制人物移動效果

    Unity3D實現虛擬按鈕控制人物移動效果

    這篇文章主要為大家詳細介紹了Unity3D實現虛擬按鈕控制人物移動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一...

    shenqingyu060520232410972022-03-11
  • C#C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    這篇文章主要介紹了C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題,簡單描述了訪問者模式的定義并結合具體實例形式分析了C#使用訪問者模式解決長...

    GhostRider9502022-01-21
  • C#深入解析C#中的交錯數組與隱式類型的數組

    深入解析C#中的交錯數組與隱式類型的數組

    這篇文章主要介紹了深入解析C#中的交錯數組與隱式類型的數組,隱式類型的數組通常與匿名類型以及對象初始值設定項和集合初始值設定項一起使用,需要的...

    C#教程網6172021-11-09
  • C#C#通過KD樹進行距離最近點的查找

    C#通過KD樹進行距離最近點的查找

    這篇文章主要為大家詳細介紹了C#通過KD樹進行距離最近點的查找,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    帆帆帆6112022-01-22
  • C#C#實現XML文件讀取

    C#實現XML文件讀取

    這篇文章主要為大家詳細介紹了C#實現XML文件讀取的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Just_for_Myself6702022-02-22
  • C#C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    這篇文章主要介紹了C# 實現對PPT文檔加密、解密及重置密碼的操作方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下...

    E-iceblue5012022-02-12
  • C#C#裁剪,縮放,清晰度,水印處理操作示例

    C#裁剪,縮放,清晰度,水印處理操作示例

    這篇文章主要為大家詳細介紹了C#裁剪,縮放,清晰度,水印處理操作示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    吳 劍8332021-12-08
1174
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 一区二区高清视频在线观看 | 中文在线免费观看 | 久久久久久久久久久久久久久久久久 | 欧美日本免费一区二区三区 | 91色一区二区三区 | 羞羞电影在线观看 | 国产精品一区视频 | 成人毛毛片 | 欧美一级免费在线观看 | av影院在线 | 国产一有一级毛片视频 | 激情小视频在线观看 | 天天躁狠狠躁夜躁2020挡不住 | 久久精品久久久久 | 国产成人在线视频 | 久久久久久久爱 | 一级毛片a级 | 国产精品美女一区二区 | 亚洲精品久久久久久久久久久 | 成人av一二三区 | 九九热色 | 国产免费美女 | 亚洲欧美爱爱 | 大尺度福利视频 | 久久综合九色综合久久久精品综合 | 日韩欧美精品电影 | 国产免费网站视频 | 黄色免费网站在线播放 | 狼网 | 欧美激情精品久久久久久黑人 | 国产二区三区在线播放 | 视频一区二区在线观看 | 黄色网址免费在线播放 | 国产精品久久久久久影院8一贰佰 | 8x成人在线电影 | 九九热精品免费视频 | 中文字幕www | 一级空姐毛片 | 羞羞视频免费入口网站 | 日本在线国产 | 国产精品亚洲综合一区二区三区 |