C# 实体框架&x2B;MySQL:BLOB/TEXT列';散列';用于无键长度的键规格

C# 实体框架&x2B;MySQL:BLOB/TEXT列';散列';用于无键长度的键规格,c#,mysql,entity-framework-6.1,C#,Mysql,Entity Framework 6.1,我正在尝试将实体框架与MySQL结合使用。我刚刚安装了包括MySQL Connector for.NET的 我找不到任何关于如何实际使用这个东西的文档,所以我一直在拼凑各种教程中的片段。似乎我需要EF6的MySql.Data和MySql.Data.Entity的引用 然后我偷了这个源代码,这是我能找到的唯一一个到MySqlConnectionFactory的参考: class ImgSigDbConfig : DbConfiguration { public ImgSigDbConfig

我正在尝试将实体框架与MySQL结合使用。我刚刚安装了包括MySQL Connector for.NET的

我找不到任何关于如何实际使用这个东西的文档,所以我一直在拼凑各种教程中的片段。似乎我需要EF6的
MySql.Data
MySql.Data.Entity的引用

然后我偷了这个源代码,这是我能找到的唯一一个到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);
但是当它点击
db.Database.Initialize
时会引发异常:

BLOB/TEXT列“Hash”在密钥规范中使用,没有密钥长度

这非常有意义,因为在MySQL中,您必须为任何blob/文本字段设置密钥长度(尽管很高兴看到它试图运行什么样的SQL)

因此,我的问题是:

  • 如何将
    散列的数据类型更改为固定长度的
    二进制(16)
  • 如何设置密钥长度(最好使用属性)
  • internal class ImgSig
    {
        [Key, Required]
        public int Id { get; set; }
    
        [Index, StringLength(16), Required]
        public byte[] Hash { get; set; }
    }