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>
- 数据库和表已经存在...
- 我对 mvc 还很陌生,但正在使用本教程 http://dotnetspeak.com/index.php/2010/10/developing-asp-net-mvc-3-application-with-ef-ctp-part-1/
应用程序构建良好...但是,当我尝试使用 Product (BTD.Data) 作为我的模型类和 BTDContext (BTD.DataContext) 作为我的数据上下文类添加控制器时,我收到以下错误:
无法使用相同的方法检索 BTD.Data.Product 的元数据
DbCompiledModel 用于针对不同类型的数据库创建上下文
不支持服务器。相反,创建一个单独的 DbCompiledModel
对于正在使用的每种类型的服务器。
我完全不知所措——我在谷歌上搜索了我能想到的几乎所有不同的错误消息变体,但都无济于事。
这是我可以验证的事情......
- MySql运行正常
- 我正在使用 MySql Connector 版本 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 问题 https://stackoverflow.com/questions/12165185/mvc4-scaffolding-add-controller-gives-error-unable-to-retrieve-metadata?rq=1- 但是我尝试了他的解决方案,但没有成功 - 也许其他遇到同样问题的人可以从该链接中受益
UPDATE
我最近刚刚尝试将其放入 MS Sql Server 中,视图脚手架添加得很好,没有错误 - 所以我不确定它是否是我的 MySql 数据库或连接字符串或什么......让我发疯......
其他参考资料
似乎其他人也遇到了与我相同的问题 - 唯一的区别是他们正在使用 sql server - 我尝试调整我的所有代码以遵循以下建议这个 stackoverflow 问题/答案在这里 https://stackoverflow.com/questions/12172074/add-controller-in-mvc4-not-working但仍然无济于事
可能修复???
所以这很奇怪...将其连接到 MS Sql Server 并添加控制器,然后将连接字符串恢复到 MySql 后,它实际上正在与 MySql 一起工作...到底是什么!?
因此,当您尝试添加控制器和视图脚手架(这是正确的短语吗?)时,它与 mysql 连接字符串一起添加,但它失败了...但是,如果您将其连接到 sql server 数据库,则生成脚手架/controller,然后恢复到 mysql 连接字符串,它可以工作......?!?!