为什么ef将char属性视为实际的guid?

izkcnapc  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(345)

实际上,我有一个char类型的属性,用于存储guid的字符串值。
我的当前设置:
-mysql数据库
-ef代码优先
-ef迁移
型号:

public class Employee  
{  
    public string Id { get; set; }
}

ef配置

public class EmployeeConfiguration : EntityConfiguration<Employee>  
{  
    public EmployeeConfiguration()  
    {  
        HasKey(x => x.Id);  
        Property(x => x.Id)
            .HasColumnType(“char”)
            .HasMaxLength(36)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);  
    }  
}

问题是:
如果执行以下操作,将引发system.formatexception:
1使用不遵循guid格式的id插入。
2从包含不遵循guid格式的id的数据库中查询上述employee类。
如果我尝试直接使用sql(不使用ef)插入或查询数据库,一切正常。你能指导我如何解决这个问题吗?
编辑1:
错误消息
guid应包含带4个破折号的32位数字(xx-x-x-x-)。
对我有效的解决方案
根据“jasonarmstrong”的建议,我使用了不同的char长度,我使用了char(37)。

z18hc3ub

z18hc3ub1#

对于每个实体框架数据类型Map,entityframework会自动将mysql的字符(36)Map到guid
尝试添加 old guids=true 对于每个c#&mysql连接器的连接字符串:guid应该包含32个带4个破折号的数字

相关问题