关于EntityFramework的多数据库使用
这次项目用到了多数据库,在使用Mysql的时候,出现了一些小问题:
MySQL ERROR 1071 (42000): Specified key was too long; max key length is 767 byte MySQL.net
这个问题与Mysql的数据格式有关系,Mysql的默认字符集是Latin1,我在改为utf8之后依旧出现这个问题,后来一同事告诉我这个问题的处理办法:
通过Data Annotation 或者Fluent API进行设置,将字段的长度设定在767byte以内。
具体方法:
1. Data Annotation
public class Store { [Key] [Column(TypeName = "char")] [MaxLength(50)] public string StoreID { set; get; } [Column(TypeName = "char")] [MaxLength(50)] public string Name { set; get; } public string ProductID { set; get; } public virtual Product Product { set; get; } }
2. Fluent API
modelBuilder.ComplexType<MetadataSubject>().Property(p => p.Name).HasColumnType("varchar").HasMaxLength(50);
或者通过
public class MetadataSubjectConfiguraiton:ComplexTypeConfiguration<MetadataSubject> { public MetadataSubjectConfiguraiton() { this.Property(p => p.Name).HasColumnType("varchar").HasMaxLength(50); } }
并在配置函数中添加设置负责类型的文件设置。
通过这两种办法可以解决基本问题。至于网上很多地方提到的更改字符集。。。我只能说:呵呵。。。