asp.net – 如何强制实体框架插入标识列?
我想编写一些C#代码来初始化一些种子数据的数据库。显然,这将要求能够在插入时设置各种标识列的值。我使用的是代码优先的方法。默认情况下,DbContext处理数据库连接,因此您无法设置IDENTITY_INSERT [dbo]。[MyTable] ON。所以,我迄今为止做的是使用DbContext构造函数,让我指定要使用的DB连接。然后,我在该数据库连接中将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()时,我被告知“必须在表’MyUser’中为identity列指定显式值,当IDENTITY_INSERT被设置为ON或复制用户插入到NOT FOR REPLICATION标识列中时。 大概是因为MyUserId(这是MyUser表中的Identity列)是主键,当我调用context.SaveChanges()时,实体框架不会尝试设置它,尽管我给MyUser实体一个MyUserId的值属性。 有没有办法强制实体框架尝试插入一个实体的主键值呢?或者可能是临时将MyUserId标记为不是主键值的方法,所以EF尝试插入? 解决方法
EF 6法,使用
msdn article:
using (var dataContext = new DataModelContainer()) using (var transaction = dataContext.Database.BeginTransaction()) { var user = new User() { ID = id,Name = "John" }; dataContext.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [dbo].[User] ON"); dataContext.User.Add(user); dataContext.SaveChanges(); dataContext.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [dbo].[User] OFF"); transaction.Commit(); } 更新:为了避免错误“当IDENTITY_INSERT设置为ON或复制用户插入到NOT FOR REPLICATION标识列”时,必须为表“TableName”中的标识列指定显式值“,则应更改StoreGeneratedPattern属性的值身份列从身份到无模型设计师。 注意,将StoreGeneratedPattern更改为None将无法插入没有指定id(正常方式)的对象,当IDENTITY_INSERT设置为OFF时,错误“Can not insert explicit value for table”TableName“中的表列值。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – RequiredFieldValidator – 如何摆脱默认的红色
- asp.net – 模型绑定与禁用文本框
- asp.net-mvc – 哪个更正确:使用UpdateModel()或接收模型作
- asp.net-mvc – 在发送到视图之前如何修改控制器动作中的表
- 如何禁用Button asp.net
- asp.net-mvc-4 – 从.net 4升级到4.5会破坏Javascript中的H
- Asp.Net:如何允许访问内部网用户的页面,拒绝外网用户?
- asp.net-mvc – 单元测试我的控制器方法导致一个空的ViewNa
- asp.net-mvc-3 – 如何将模型绑定中使用的所有ValueProvide
- asp.net错误表单不能嵌套在元素表单中?
- 将配置文件appsetting中的值转换为动态对象调用
- asp.net-mvc-4 – ASP.NET帮助页面默认主页?
- asp.net – 拒绝访问web.config中的“admin”文件
- asp.net-mvc-3 – 我可以传递视图模型到动作链接
- asp.net-identity-2 – Asp.Net身份保存用户没有
- asp.net-mvc – ASP.NET MVC – Routes和UrlHelp
- asp.net-mvc – ASP.NET MVC获取View的最后修改日
- asp.net – Reflection构成了什么风险? (中等信
- asp.net – 如何直接在.aspx页面中访问web.confi
- 如何在asp.net c中以pdf格式导出同步图表