在 EF4 中设置自动增量列的自定义值

发布于 2024-11-24 19:32:34 字数 357 浏览 1 评论 0原文

我将 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

蓝咒 2024-12-01 19:32:35

使用 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:

  • Column will be filled in database and value passed back to application after insert.
  • It also means that value of this column will never be passed from your application.

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 on ObjectContext to execute SQL insert directly.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文