MVC4 +实体框架4.4 + MySql + POCO /代码优先
我正在设置以上配置..这是我的课程:
namespace BTD.DataContext { public class BTDContext : DbContext { public BTDContext() : base("name=BTDContext") { } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); //modelBuilder.Conventions.Remove<System.Data.Entity.Infrastructure.IncludeMetadataConvention>(); } public DbSet<Product> Products { get; set; } public DbSet<ProductImage> ProductImages { get; set; } } } namespace BTD.Data { [Table("Product")] public class Product { [Key] public long ProductId { get; set; } [DisplayName("Manufacturer")] public int? ManufacturerId { get; set; } [Required] [StringLength(150)] public string Name { get; set; } [Required] [DataType(DataType.MultilineText)] public string Description { get; set; } [Required] [StringLength(120)] public string URL { get; set; } [Required] [StringLength(75)] [DisplayName("Meta Title")] public string MetaTitle { get; set; } [DataType(DataType.MultilineText)] [DisplayName("Meta Description")] public string MetaDescription { get; set; } [Required] [StringLength(25)] public string Status { get; set; } [DisplayName("Create Date/Time")] public DateTime CreateDateTime { get; set; } [DisplayName("Edit Date/Time")] public DateTime EditDateTime { get; set; } } [Table("ProductImage")] public class ProductImage { [Key] public long ProductImageId { get; set; } public long ProductId { get; set; } public long? ProductVariantId { get; set; } [Required] public byte[] Image { get; set; } public bool PrimaryImage { get; set; } public DateTime CreateDateTime { get; set; } public DateTime EditDateTime { get; set; } } }
这是我的web.config设置…
<connectionStrings> <add name="BTDContext" connectionString="Server=localhost;Port=3306;Database=btd;User Id=root;Password=mypassword;" providerName="MySql.Data.MySqlClient" /> </connectionStrings>
应用程序构建良好…但是,当我尝试使用Product(BTD.Data)作为我的模型类并使用BTDContext(BTD.DataContext)作为我的数据上下文类添加控制器时,出现以下错误:
不支持无法使用相同的DbCompiledModel检索BTD.Data.Product的元数据来针对不同类型的数据库服务器创建上下文。而是,为所使用的每种服务器类型创建一个单独的DbCompiledModel。
我完全不知所措-我已经用上面我能想到的该错误消息的几乎所有不同变体来搜索谷歌,但无济于事。
这是我可以验证的东西…
我也尝试在我的web.config中包含/删除它:
<system.data> <DbProviderFactories> <remove invariant="MySql.Data.MySqlClient"/> <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> </DbProviderFactories>
我已经在这个bug上工作了好几天了-我现在要说的是一点,我愿意付钱给别人来解决它..别开玩笑了…我真的很想使用MVC 4和Razor- 我对此感到非常兴奋,但是现在我很灰心-我真的很感谢对此的任何帮助/指导!
另请注意-我正在使用Nuget的Entityframework …
另一个注意
我正在使用默认的Visual Studio模板,该模板使用帐户页面和其他内容创建您的MVC项目。我只是删除了对已添加文件的所有引用,因为它们试图使用不存在的“ DefaultConnection”-因此我认为这些文件可能是导致错误的原因-但是删除它们后仍然没有运气-
我只是想让所有人都知道我正在使用Visual Studio MVC项目模板,该模板会预先创建一堆文件。我将尝试从没有这些文件的空白MVC项目中重新创建所有内容-测试完该文件后,我将对其进行更新
使用VS MVC基本模板的更新: 导致相同的错误-仍然没有解决方案
另一个人遇到同样的问题
就在这里,这是另一个模仿我的stackoverflow问题 -但是我尝试了他的解决方案却无济于事-也许其他遇到相同问题的人也可以从该链接中受益
更新
我最近刚刚尝试将其放入MS Sql Server中,并且视图脚手架添加得很好,没有错误-所以我不确定它的MySql数据库或连接字符串还是什么……让我发疯。
其他参考
看来其他人也遇到了同样的问题-唯一的区别是他们使用的是sql server- 我试图调整所有代码以遵循此处有关stackoverflow问题/答案的建议,但仍然无济于事
可能的修复???
所以这很奇怪…将其连接到MS Sql Server并添加控制器后,然后将连接字符串还原为MySql,这实际上是与MySql一起使用的。。。
所以看来,当您尝试添加控制器并使用mysql连接字符串添加视图脚手架(是否是正确的短语?)时,它会失败…但是,如果将其连接到sql server db,则生成脚手架/ controller,然后恢复为mysql连接字符串即可。
似乎MVC4控制器脚手架不能正确识别MySql连接字符串。为控制器生成EF CRUD代码时,如下所示更改连接字符串:
<connectionStrings> <add name="BTDContext" connectionString="Data Source=host_name;Database=database_name;uid=user_id;pwd=password;" providerName="System.Data.SqlClient" /> </connectionStrings>
运行应用程序时将其更改回标准:
<connectionStrings> <add name="BTDContext" connectionString="Data Source=host_name;Database=database_name;uid=user_id;pwd=password;" providerName="MySql.Data.MySqlClient" /> </connectionStrings>
注意更改,提供程序名称。