亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何強制實體框架插入標識列?

如何強制實體框架插入標識列?

翻閱古今 2019-10-11 11:12:03
我想編寫一些C#代碼以使用一些種子數據初始化數據庫。顯然,這將要求在插入時能夠設置各種Identity列的值的能力。我正在使用代碼優先方法。默認情況下,DbContext處理數據庫連接,因此您不能SET IDENTITY_INSERT [dbo].[MyTable] ON。因此,到目前為止,我所做的是使用DbContext構造函數,該構造函數允許我指定要使用的數據庫連接。然后,我設置IDENTITY_INSERT到ON該數據庫的連接,然后嘗試使用實體框架插入我的記錄。這是到目前為止我得到的一個例子:public class MyUserSeeder : IEntitySeeder {    public void InitializeEntities(AssessmentSystemContext context, SqlConnection connection) {        context.MyUsers.Add(new MyUser { MyUserId = 106, ConceptPersonId = 520476, Salutation = "Mrs", Firstname = "Novelette", Surname = "Aldred", Email = null, LoginId = "520476", Password="28c923d21b68fdf129b46de949b9f7e0d03f6ced8e9404066f4f3a75e115147489c9f68195c2128e320ca9018cd711df", IsEnabled = true, SpecialRequirements = null });        try {            connection.Open();            SqlCommand cmd = new SqlCommand("SET IDENTITY_INSERT [dbo].[MyUser] ON", connection);            int retVal = cmd.ExecuteNonQuery();            context.SaveChanges();        }        finally {            connection.Close();        }    }}如此接近卻又如此之遙-因為盡管cmd.ExecuteNonQuery()運行良好,但隨后運行時context.SaveChanges(),我被告知“當IDENTITY_INSERT設置為ON或將復制用戶設置為ID時,必須為表'MyUser'中的標識列指定顯式值插入NOT FOR REPLICATION身份列。”大概是因為MyUserId(這是MyUser表中的Identity列)是主鍵,所以context.SaveChanges()即使我為MyUser實體賦予了MyUserId屬性值,實體框架也不會在調用時嘗試設置它。有沒有辦法強迫實體框架嘗試為實體插入甚至主鍵值呢?還是一種臨時標記MyUserId為不是主鍵值的方法,以便EF嘗試將其插入?
查看完整描述

3 回答

  • 3 回答
  • 0 關注
  • 596 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號