我正在创建一个以MySQL为后端的MVC应用程序。我计划使用实体框架来处理这个数据库。我已经有了一个数据库,所以需要从数据库生成模型。
环境:
Visual 1.27连接器/.NET 6.10.5 Visual 2015的MySQL服务器5.7.21 MySQL
复制问题:
步骤1:添加新项目'Ado.net实体数据模型‘步骤2:从数据库中选择'EF设计器’并单击‘下一步’第3步:单击‘新建连接’
没有mysql连接器可用。
其他详细信息:
在Visual 2015和17初始时间中,它显示提供程序。当我下一次尝试时,它没有显示“请帮助”。我要检查这个两天
发布于 2018-02-20 18:44:51
开始使用VS 2013和EF 6
希望这能帮点忙。
发布于 2018-02-16 10:47:17
正如MaDOS所提到的,mySql不受实际支持。如果您想要使用EF无论如何,您必须做一个代码优先-尝试。
您必须编写映射类,并告诉EF它不应该更改db。
禁用db的示例上下文-更改
public class MySqlDbContext : DbContext
{
public DbSet<MyOrderClass> Orders { get; set; }
public MySqlDbContext(IDbConnection connection)
: base((DbConnection)connection, false)
{
Database.SetInitializer<MySqlDbContext>(null); // Disable db-changes by dbContext
}
}你的主要问题是数据类型。在MS世界之外,并不是所有的数据类型都被支持(甲骨文在DateTime上也遇到了一些问题)。在示例类中,“创建”-column下面的类作为字符串处理,该字符串总是工作的。在.NET应用程序中,您必须实现映射到所需类型的“转换器”-properties。
具有映射的类.配置
[Table("TORDERS")]
public class MyOrderClass
{
[Column("ORDERID")]
public long Id { get; set; }
[Column("CREATED")]
public string CreatedString { get; set; }
[NotMapped]
public DateTime? Created
{
get
{
DateTime tmp;
if (DateTime.TryParse(this.CreatedString, out tmp))
return tmp;
return null;
}
set
{
this.CreatedString = value.HasValue ? value.Value.ToString("yyyy-MM-dd HH:mm:ss") : null;
}
}
}
static void Main(params string[] args)
{
MyOrderClass tmp = new MyOrderClass() { CreatedString = "2018-01-01 11:11:11"};
Console.WriteLine(tmp.Created.ToString()); // This is how you want to work
tmp.Created = null;
Console.WriteLine(tmp.CreatedString); // this is surely not what you want to do
tmp.Created = new DateTime(2018,02,02,10,10,10);
Console.WriteLine(tmp.CreatedString); // Check if setter works ;)
}Im没有最新的类型工作,但有了这一点,您将永远能够使用EF。一段时间前,我们使用它访问一个现有的db,它无论如何都是一个糟糕的db模式,因为我们无论如何都需要设置数据类型的模式;)。
发布于 2018-02-21 14:59:59
会不会是32位vs 64位的问题?
示例:安装了64位驱动程序的Visual是32位吗?
对于oledb到Informix,我一直存在这个问题。您的软件将完美地工作在64位,但工具是32位。
https://stackoverflow.com/questions/48560729
复制相似问题