在 EF4 中设置自动增量列的自定义值
我将 EF4 与 ASP.NET 结合使用。实体Subject
有一个字段Id
,在MySql中设置为自动递增。这通常效果很好,但有一次我需要为 Id
设置一个自定义值。
Subject sNone = new Subject { Id = 0, Title = "None", Code = "00" };
ctx.Subjects.AddObject(sNone);
这确实在数据库中创建了一个新主题。但是,其 Id
未设置为 0
- 它设置为自动递增值。
知道我该如何解决这个问题吗?
I am using EF4 with ASP.NET. The entity Subject
has a field Id
which is set to auto-increment in MySql. This normally works great, but on one occasion I need to set a custom value for Id
.
Subject sNone = new Subject { Id = 0, Title = "None", Code = "00" };
ctx.Subjects.AddObject(sNone);
This indeed creates a new subject in the database. However, its Id
is not set to 0
- it is set to an auto-increment value.
Any idea how I can get around this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
使用 EF 无法解决这个问题。一旦列自动递增,它就会在实体模型中使用
StoreGeneratePattern.Identity
进行配置。这意味着:如果您关闭 StoreGeneratePattern,您将失去所有这些行为,因为该列的值将被视为任何其他值,并且它将始终传递到数据库 = 您的自动增量逻辑将不起作用。
还有一个单独的问题 - 是否允许在 MySQL 中显式设置自动递增列的值?在 MSSQL Server 中,除非您明确为连接打开它,否则它不是。
使用显式 Id 插入此记录的最佳方法是使用旧的 ADO.NET 或
ObjectContext
上的ExecuteStoreCommand
直接执行 SQL 插入。You cannot get around this with EF. Once the column is auto incremented it is configured in entity model with
StoreGeneratedPattern.Identity
. That means that:If you turn off the
StoreGeneratedPattern
you will lose all this behavior because value of this column will be treated as any other and it will be always passed to the database = your auto incrementation logic will not work.There is also separate problem - is it allowed to set value for auto incremented columns explicitly in MySQL? In MSSQL Server it is not unless you explicitly turn it on for the connection.
The best way to insert this record with explicit Id is using old ADO.NET or
ExecuteStoreCommand
onObjectContext
to execute SQL insert directly.