【问题标题】:Create a VARCHAR BINARY column in MySQL with Entity Framework Codefirst在 MySQL 中使用 Entity Framework Code First 创建一个 VARCHAR BINARY 列
【发布时间】:2017-04-15 08:26:50
【问题描述】:

如果数据库不存在,我有一个使用 EntityFramework Code First 创建数据库的应用程序。我使用 MySQL 作为数据库引擎。

我有一个表,其中一个键列需要区分大小写。我不想使用排序规则将整个数据库或表标记为区分大小写,因此(据我所知)最好的方法是将列标记为 BINARY

有谁知道如何使用 Code First 来做到这一点?我试着做:

[Column(TypeName = "varchar(100) BINARY")]

但它不喜欢那样,我第一次访问我得到的数据库模型时

EntityFramework.dll 中出现“System.InvalidOperationException”类型的异常,但未在用户代码中处理

附加信息:序列不包含匹配元素

也许我应该在创建数据库后做一个ALTER TABLE

【问题讨论】:

    标签: c# mysql entity-framework ef-code-first


    【解决方案1】:

    我不想使用排序规则将整个数据库或表标记为区分大小写

    好吧,不,这没有意义,但是您应该能够使用适当的排序规则在列上执行此操作,例如:

    VARCHAR(100) COLLATE utf8_bin
    

    或者只是……

    VARBINARY(100)
    

    ...在 MySQL 中完全有效(尽管我不知道 EF 是否会正确处理它)。

    http://dev.mysql.com/doc/refman/5.7/en/binary-varbinary.html

    【讨论】:

    • 我在发布问题后实际上已经尝试过这个,不幸的是它在我的情况下不起作用,因为我需要 EF 属性是一个字符串,但是这个列类型只与 byte[] 兼容跨度>
    • 好吧,如果它是二进制的,那么它就不是字符串——它是字节——所以这部分在强类型环境中是有意义的。 VARCHAR(100) COLLATE utf8_bin 呢?那应该是一个区分大小写的字符串。
    • 如果我手动创建表,那效果很好,但我正在寻找一种使用 EntityFramework 的方法
    • 可能——“你不能”——随机谷歌发现:github.com/aspnet/EntityFramework/issues/2779 可能适用也可能不适用。从我作为 DBA 的角度来看,ORM 通常非常擅长使简单的事情变得困难或不可能。这个“不是一个非常常见的要求”的概念让我觉得相当可笑,有点像说“VARCHAR 的长度不是 255 不是一个非常常见的要求。”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    相关资源
    最近更新 更多