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

时间:2011-07-18 17:19:57

标签: mysql entity-framework entity-framework-4 auto-increment

我在ASP.NET中使用EF4。实体Subject有一个字段Id,在MySql中设置为自动递增。这通常很有用,但有一次我需要为Id设置自定义值。

Subject sNone = new Subject { Id = 0, Title = "None", Code = "00" };
ctx.Subjects.AddObject(sNone);

这确实在数据库中创建了一个新主题。但是,其Id未设置为0 - 它设置为自动增量值。

知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

你不能用EF解决这个问题。列自动递增后,将在实体模型中使用StoreGeneratedPattern.Identity进行配置。这意味着:

  • 将在数据库中填充列,并在插入后将值传递回应用程序。
  • 这也意味着永远不会从您的应用程序传递此列的值。

如果关闭StoreGeneratedPattern,您将失去所有这些行为,因为此列的值将被视为任何其他值,并且它将始终传递给数据库=您的自动增量逻辑将不起作用。

还有单独的问题 - 是否允许在MySQL中显式设置自动递增列的值?在MSSQL Server中,除非您明确地为连接打开它,否则它不会。

使用显式Id插入此记录的最佳方法是使用旧的ADO.NET或ExecuteStoreCommand ObjectContext直接执行SQL插入。