c# - 如何从 C# Entity Framework Code First 模型获取 mysql char 列类型

标签 c# mysql entity-framework-4 key

我刚刚通过创建 Entity Framework Code First 模型完成了与 Hello World 等效的工作(我编写了其他 C# 程序,但没有使用 Entity Framework)。我创建了一个这样的模型:

class Preferences
{
    [Key]
    public string StationName { get; set; }
    [MaxLength(30)]
    public string MainDatabase { get; set; }
    [MaxLength(30)]
    public string DefaultSequence { get; set; }
}

然后就有了一个添加记录的小套路

var newPrefs = new Preferences
{
    StationName = "MATT",
    DefaultSequence = "NONE",
    MainDatabase = "NONE"
};
Preferences prefs = foo.Preferences.Add(newPrefs);

然后尝试创建数据库,但在添加主键时失败并出现错误

"BLOB/TEXT column 'StationName' used in key specification without a key length"

因为它使用数据类型“mediumtext”而不是 CHAR 或 VARCHAR,而 MySQL 不能使用该类型作为键。

有没有一种方法仍然或多或少与数据库无关,它会告诉 MySQL 使用首选类型作为键列?还是我只需要放弃并制作一个整数键?

我也尝试过这样的设计变体,但没有任何效果。

class Preferences
{
    [Key,DataType("CHAR"),StringLength(30)]
    public string StationName { get; set; }
    [MaxLength(30)]
    public string MainDatabase { get; set; }
    [MaxLength(30)]
    public string DefaultSequence { get; set; }
}

感谢您的帮助。

最佳答案

也许可以尝试流畅的映射列类型:

modelBuilder.Entity<Preferences>()
    .Property(p => p.Id)
    .HasColumnType("CHAR(30)");

我认为这等同于 [Column(TypeName = "CHAR(30)")] 但不确定是否相同。

编辑:根据 Matt 的测试,长度是独立的,“char”可能区分大小写(MySQL 和其他引擎中有很多设置与标识符和操作系统中的区分大小写相关有时可以发挥作用,因此可能会有所不同):[Column(TypeName="char")][MaxLength(30)]

关于c# - 如何从 C# Entity Framework Code First 模型获取 mysql char 列类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15557441/

相关文章:

mysql全文索引: why result of match against is not as good as result of like?

linq - Entity Framework - 如何在多个键上使用 OR 条件进行连接

c# - 从 C# 方法返回一个 Lua 表而不将它添加到全局堆栈

c# - 无法在静态上下文中访问非静态字段 'lblSystemStatus'

php - 选择带有 IN 和 TEXT 字段的查询

c# - Entity Framework 一对多产生异常

asp.net - 尝试在返回的 ToList 中获取 Distinct() 和/或 GroupBy(...)

C# MSAGL 更改图标

c# - 使用 C# 按类型和属性值筛选控件

mysql - 查询中的 SELECT 和 UPDATE 行?