我正在尝试将实体框架与 MySQL 一起使用。我刚刚安装了适用于 Windows 的 MySQL 安装程序,其中包括适用于 .NET 的 MySQL 连接器。
我找不到任何关于如何实际使用这个东西的文档,所以我一直在拼凑各种教程中的片段。看来我需要MySql.Data
和MySql.Data.Entity for EF6
(截图)的参考。
然后我从一些随机项目中偷了这个源代码,这是我能找到的唯一参考MySqlConnectionFactory
:
class ImgSigDbConfig : DbConfiguration
{
public ImgSigDbConfig()
{
base.AddDependencyResolver(new MySqlDependencyResolver());
base.SetProviderFactory(MySqlProviderInvariantName.ProviderName, new MySqlClientFactory());
base.SetProviderServices(MySqlProviderInvariantName.ProviderName, new MySqlProviderServices());
base.SetDefaultConnectionFactory(new MySqlConnectionFactory());
base.SetMigrationSqlGenerator(MySqlProviderInvariantName.ProviderName, () => new MySqlMigrationSqlGenerator());
base.SetProviderFactoryResolver(new MySqlProviderFactoryResolver());
base.SetManifestTokenResolver(new MySqlManifestTokenResolver());
}
}
我无法弄清楚如何在那里设置我的数据库凭据,但显然你可以在构造时传递它们DbContext
:
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<ImgSimContext>());
var conn = new MySqlConnectionStringBuilder
{
Server = "localhost",
UserID = "root",
Password = "pass",
Database = "ImgSig"
};
using (var db = new ImgSimContext(conn.ToString()))
{
SqlConnection.ClearAllPools();
db.Database.Initialize(force: true);
现在我创建了一个非常简单的 POCO:
internal class ImgSig
{
[Key, Required]
public int Id { get; set; }
[Index, StringLength(16), Required]
public byte[] Hash { get; set; }
}
但是当它遇到db.Database.Initialize
异常时会抛出:
密钥规范中使用的 BLOB/TEXT 列“哈希”没有密钥长度
这很有意义,因为在 MySQL 中,您必须为任何 blob/文本字段设置密钥长度(尽管很高兴看到它正在尝试运行什么 SQL)。
所以我的问题是:
- 如何将数据类型更改
Hash
为固定长度binary(16)
? - 如何设置密钥长度(最好使用属性)?