C# 实体框架&x2B;MySQL:BLOB/TEXT列';散列';用于无键长度的键规格
我正在尝试将实体框架与MySQL结合使用。我刚刚安装了包括MySQL Connector for.NET的 我找不到任何关于如何实际使用这个东西的文档,所以我一直在拼凑各种教程中的片段。似乎我需要EF6的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.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; }
}