当前位置: 首页 > 面试题库 >

无法检索元数据

乔丁雨
2023-03-14
问题内容

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>
  1. 数据库AND表已经存在…
  2. 我对mvc还是很陌生,但是正在使用本教程

应用程序构建良好…但是,当我尝试使用Product(BTD.Data)作为我的模型类并使用BTDContext(BTD.DataContext)作为我的数据上下文类添加控制器时,出现以下错误:

不支持无法使用相同的DbCompiledModel检索BTD.Data.Product的元数据来针对不同类型的数据库服务器创建上下文。而是,为所使用的每种服务器类型创建一个单独的DbCompiledModel。

我完全不知所措-我已经用上面我能想到的该错误消息的几乎所有不同变体来搜索谷歌,但无济于事。

这是我可以验证的东西…

  1. MySql工作正常
  2. 我正在使用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>

我已经在这个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>

注意更改,提供程序名称。



 类似资料:
  • 我正在尝试获取属性的值以使用引导程序进行删除确认。问题是我无法获取的值。 当我按下控制台按钮时,结果是 管理员视图:488 初始化原型: 对象(0) 数据表: ƒ (t) 添加: ƒ (e,t) 添加返回: ƒ (e) 添加类: ƒ (e) 词缀: ƒ (c) 之后: ƒ () ajax完成: ƒ (e) ajax错误: ƒ (e) ajax发送: ƒ (e) ajax开始: ƒ (e) ajax

  • 我想从数据库中检索名称。但我总是收到错误: 数据库Java语言 它不断返回错误 android.database.CursorIndexOutOfBoundsException:请求索引-1,大小为1,字符串名称=helper.getProductNameT(cur); 有人知道我的编码哪里出错了吗?

  • 这是我的第二个版本,我试图从Firebase检索代码,并用它做一些事情。这是我的第二种方式: 这将崩溃,并出现错误代码: 未能将类型“__NSCFString”(0x10A77F4A0)的值强制转换为“NSDictionary”(0x10A780288)。在“更新”行。这是我的第一次尝试: 打印更多数据: -路径通道引用:可选(https://x.com/channels/-kegkajavh6u

  • 我有一个名为User的实体类,其中包含数据库的OneToMany列: 当我将用户插入数据库时,一切正常,他的汽车也被添加到user_cars表中。当检索汽车时,我得到这个异常: 我已经搜索了其他答案,但没有找到如何解决它。这就是我试图检索用户的方式。 问题是什么?我如何解决?我不明白后台发生了什么。

  • 我试图显示一个零件的"loc",如果它的零件号我给。以下是数据结构的样子: 活动代码: getLoc是Product类的getter函数,它返回给定curP对应的“loc”。curP部分表示子值。 逻辑对我来说似乎是正确的,但我没有得到输出。我哪里出了问题?

  • 脚本: 超文本标记语言: 我试图获取的文本与帐单地址相同。我也尝试过使用getText(),但没有返回任何结果。