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的虛函數進行實現

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<TestEntity>().Property(p => p.ID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
}

2)第二步

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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM