天天看點

【轉發】Linq To EF添加記錄後擷取添加的自增ID和叫“ID”的列不是自增列不讓插入的問題

1:添加記錄後,如何擷取新添加的ID的值

比如,一個實體 TestEntity   對應一個表TestEntity(ID主鍵自增,Name,age),使用linq to ef   添加一條記錄後,如何擷取新記錄的ID值?如下代碼:

var te = new TestEntity ()
{
    Name = "名字",
    Age = 21
};
using (EFDbContext context = new EFDbContext())
{
    context.TestEntity .Add(te);                
    context.SaveChanges();
    return te.ID;
}      

調用SaveChanges()之後,ef.ID的值就是資料庫中新加記錄對應自增辨別列的值。Linq to ef智能地判斷出ID就是自增主鍵辨別列。 他給我們傳回了。

2:列名叫“ID”的列,它不是自增列,linq to ef不讓插入的問題

如标題,就是,列名叫“ID”的列,它不是主鍵,也不是主鍵,linq to ef不讓插入。我已經給ID指派了 但它一直提示 ID不能為NULL  ,打斷點,看了,也有值!

代碼走到SaveChanges(),就報異常,提示ID不能為空!超蛋疼...

原因:預設情況,linq to ef認為隻要實體類中有ID屬性,資料庫對應的是一定是自增辨別列。

解決方式:

1)第一步

因為EFDbContex繼承自Context類,是以,我們需要從新對它這個叫OnModelCreating的虛函數進行實作

public class TestEntity
    {
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public int ID { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }      

2)第二步

在實體類叫ID的屬性上加标記實作(記得添加引用):

public class TestEntity
    {
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public int ID { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }      

原文位址:https://blog.csdn.net/zhifeiya/article/details/25743361

學習交流群:364976091