MVC4 + Entity Framework 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>
- 数据库和表已经存在...
- 我对 mvc 还是很陌生,但正在使用本教程
应用程序构建良好......但是,当我尝试使用 Product (BTD.Data) 作为我的模型类和 BTDContext (BTD.DataContext) 作为我的数据上下文类添加控制器时,我收到以下错误:
不支持使用相同的 DbCompiledModel 检索 BTD.Data.Product 的元数据以针对不同类型的数据库服务器创建上下文。相反,为正在使用的每种类型的服务器创建一个单独的 DbCompiledModel。
我完全不知所措-我已经用我能想到的上述错误消息的几乎所有不同变体搜索了谷歌,但无济于事。
以下是我可以验证的事情......
- MySql 工作正常
- 我正在使用 MySql 连接器版本 6.5.4 并创建了其他 ASP.net Web 表单 + 实体框架应用程序,这些应用程序存在零问题
我也尝试在我的 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>
我确实已经在这个错误上工作了好几天了——我现在已经到了愿意付钱给别人来解决它的地步……不开玩笑……我真的很喜欢使用 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 连接字符串就可以了.... ?!?!