gpt4 book ai didi

c# - 表 'DBNAME.dbo.TableNAME' 不存在 MySQL Entity Framework 6

转载 作者:行者123 更新时间:2023-11-30 13:11:57 27 4
gpt4 key购买 nike

我正在使用 Entity Framework 6.0.0 和 MySql Server 5.6.17

我通过 nuget 添加了 MySql.Data.Entities,它安装了 Entity Framework 6.0.0 和 MySql.Data 6.8.4

一切都已完美设置,并且与我的一些业务实体一起正常工作。它启用了自动迁移(真)。

后来我添加了更多的实体然后它开始给出像

这样的错误
Table 'DBNAME.dbo.TABLENAME' doesn't exist Entity Framework 6

我试过删除整个数据库并重新创建它,但没有成功。

我已经尝试将 Entity Framework 更新到 6.1.2 并将 MySql.Data 更新到 6.9.5 但它并没有解决问题,而是给出了一些其他错误,如

Method not found: 'System.Data.Entity.Migrations.Builders.TableBuilder`1<!0> System.Data.Entity.Migrations.Builders.TableBuilder`1.Index(System.Linq.Expressions.Expression`1<System.Func`2<!0,System.Object>>, System.String, Boolean, Boolean, System.Object)'.

所以我将我的 EF 和 MySql.Data 更改为以前的版本(EF 6.0.0 和 MySql.Data 6.8.4)

我又找到一篇文章http://bugs.mysql.com/bug.php?id=69649谁有和我一样的错误所以我修改了我的配置方法如下

 public Configuration()
{
this.AutomaticMigrationsEnabled = true;
SetSqlGenerator("MySql.Data.MySqlClient", new MySql.Data.Entity.MySqlMigrationSqlGenerator());
CodeGenerator = new MySql.Data.Entity.MySqlMigrationCodeGenerator();
AutomaticMigrationDataLossAllowed = true; // or false in case data loss is not allowed.
}

但是并没有解决问题。我又遇到了同样的错误。

我的示例业务实体如下。

public class User
{
[Key]
public int UserID { get; set; }
[Display(Name = "User Email")]
[AllowHtml]
public string UserEmail { get; set; }
[MaxLength(100)]
[Required(ErrorMessage = "Enter user password")]
[Display(Name = "User Password")]
[AllowHtml]
public string UserPassword { get; set; }
[MaxLength(50)]
[Display(Name = "First Name")]
[AllowHtml]
public string FirstName { get; set; }
[MaxLength(50)]
[Display(Name = "Last Name")]
[AllowHtml]
public string LastName { get; set; }
[Display(Name = "Profile Picture")]
public string ProfilePicURL { get; set; }
public string SaltKey { get; set; }
}

提前感谢您的帮助

最佳答案

class SqlGenerator : MySql.Data.Entity.MySqlMigrationSqlGenerator
{
public override IEnumerable<MigrationStatement> Generate(IEnumerable<MigrationOperation> migrationOperations, string providerManifestToken)
{
IEnumerable < MigrationStatement > res = base.Generate(migrationOperations, providerManifestToken);
foreach(MigrationStatement ms in res)
{
ms.Sql = ms.Sql.Replace("dbo.","");
}
return res;
}
}
(...)
SetSqlGenerator("MySql.Data.MySqlClient", new SqlGenerator());

更好的解决方案:当我重新启动应用程序时,EF 总是想再次删除并创建外键约束,所有这些奇怪的 sql 操作都包含“dbo”。模式。我只是忽略它们。

foreach(MigrationStatement ms in res)
{
//ms.Sql = ms.Sql.Replace("dbo.","");
if(ms.Sql.Contains("dbo."))
{
return new List<MigrationStatement>();
}
}

关于c# - 表 'DBNAME.dbo.TableNAME' 不存在 MySQL Entity Framework 6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28044340/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com