2

我正在尝试将实体框架与 MySQL 一起使用。我刚刚安装了适用于 Windows 的 MySQL 安装程序,其中包括适用于 .NET 的 MySQL 连接器。

我找不到任何关于如何实际使用这个东西的文档,所以我一直在拼凑各种教程中的片段。看来我需要MySql.DataMySql.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)。

所以我的问题是:

  1. 如何将数据类型更改Hash为固定长度binary(16)
  2. 如何设置密钥长度(最好使用属性)?
4

0 回答 0