关于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);
        }
    }
  并在配置函数中添加设置负责类型的文件设置。

  通过这两种办法可以解决基本问题。至于网上很多地方提到的更改字符集。。。我只能说:呵呵。。。

原文地址:https://www.cnblogs.com/ArrowTip/p/CodeFirstMysql.html