如何在 EF Code First 中声明具有 Medium Blob 数据类型的表上的字段

Posted

技术标签:

【中文标题】如何在 EF Code First 中声明具有 Medium Blob 数据类型的表上的字段【英文标题】:How do i declare a field on a table with the datatype of Medium Blob in EF Code First 【发布时间】:2018-02-22 06:33:15 【问题描述】:

我正在使用 SapientGuardian.EntityFrameworkCore.mysql 使用 dotnet Core EntityFramework

我有一个数据库实体,其属性名为 ProfileImage 存储为byte[] ...提取下方

public class ProfileEntity


    /// Gets or sets the full name.
    /// </summary>
    public string FullName  get; set; 

    /// <summary>
    /// A Byte Array with the profile image Bitmap
    /// </summary>
    public byte[] ProfileImage  get; set; 

当它在 MySql 数据库中创建时,它会创建一个 BLOB 数据类型。

我的问题是如何将其设置为 MediumBlob?

编辑: 迁移(我忘了运行)产生了以下结果:

public partial class AddMediumBlob : Migration

    protected override void Up(MigrationBuilder migrationBuilder)
    
        migrationBuilder.AlterColumn<byte[]>(
            name: "ProfileImage",
            table: "ProfileEntity",
            type: "MediumBlob",
            nullable: true,
            oldClrType: typeof(byte[]),
            oldNullable: true);
    

    protected override void Down(MigrationBuilder migrationBuilder)
    
        migrationBuilder.AlterColumn<byte[]>(
            name: "ProfileImage",
            table: "ProfileEntity",
            nullable: true,
            oldClrType: typeof(byte[]),
            oldType: "MediumBlob",
            oldNullable: true);
    

【问题讨论】:

【参考方案1】:

您可以在 DbContext 中使用 Fluent API:

protected override void OnModelCreating(DbModelBuilder modelBuilder)

    modelBuilder.Entity<ProfileEntity>().Property(p => p.ProfileImage)
        .HasColumnType("MediumBlob");

【讨论】:

我刚刚尝试过,它似乎不起作用。它仍然将其保留为 Blob。我使用 dotnet Core EF 有什么不同吗? 您是否创建了新的迁移?如果是,您可以发布创建的迁移类吗? Opps 我忘记了迁移 运行迁移后仍然没有更新数据库。我正在删除并重新创建,我可以看到迁移已在 __EFMigrationsHistory 表上运行,但数据类型仍然是 BLOB 也许这是一个 EF 错误,它无法识别更新表。如果您已经删除并重新创建数据库,您是否也可以尝试删除所有迁移然后创建一个新的?

以上是关于如何在 EF Code First 中声明具有 Medium Blob 数据类型的表上的字段的主要内容,如果未能解决你的问题,请参考以下文章

EF Code-First如何使用复合键从表中读取A.

EF Code First - 如何设置身份种子?

我应该如何在 MVC3 中使用 Code First Entity Framework (4.1) 声明外键关系?

EF 4.1 Code First - 在 Firebird 数据库中存储图像

具有通用存储库和依赖注入和 SoC 的 EF6 Code First

EF Code First“无效的列名'Discriminator'”但没有继承