【问题标题】:NetCore 1.1 + Npgsql, Add-Migration appears to ignore [NotMapped]?NetCore 1.1 + Npgsql,Add-Migration 似乎忽略了 [NotMapped]?
【发布时间】:2016-12-06 20:56:57
【问题描述】:

警告:我对此很陌生,所以请放轻松。 我正在开发一个 netcore 应用程序并使用 Npgsql 连接到 postgresql 数据库。我不确定是什么导致了错误,但是当我尝试使用具有 [NotMapped] 属性的二维数组 (double[][]) 的模型运行 Add-Migration 时,我收到以下错误:

System.InvalidCastException:无法转换类型的对象 'Microsoft.EntityFrameworkCore.Storage.Internal.NpgsqlArrayTypeMapping' 输入 'Microsoft.EntityFrameworkCore.Storage.Internal.NpgsqlBaseTypeMapping'。

我怀疑这不是 Npgsql 问题,因为我认为 [NotMapped] 属性应该忽略 double[][] 并且不要尝试将其映射到某个东西。

这是模型的违规部分

[NotMapped]
public double[][] LossData
{
    get
    {
       return JsonConvert.DeserializeObject<double[][]>(InternalLossData);
    }
    set
    {
       InternalLossData = JsonConvert.SerializeObject(value);
}

Microsoft.EntityFrameworkCore.Tools 是 1.1.0-preview4-final 版本。我认为这是负责添加迁移的包,因此我怀疑问题可能存在。

但我不知道。

更新

mww 的建议不起作用,所以我切换到使用默认的 sql 驱动程序(不是 Npgsql)并且它起作用了。这样就可以将其范围缩小到我做错的事情或使用 Npgsql 的事情。

【问题讨论】:

标签: entity-framework asp.net-core entity-framework-migrations npgsql asp.net-core-1.1


【解决方案1】:

感谢报告,这是 Npgsql EF Core 提供程序中的一个错误。该修复程序将在 1.1.1 中发布,同时将您的正确非公开(至少是 getter 或 setter)或降级到 1.0.x。

【讨论】:

    【解决方案2】:

    您也可以使用 Fluent API,只需将其添加到 DBContext 类中即可忽略属性。

    在方法OnModelCreating()添加

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
       modelBuilder.Entity<YourModelClass>().Ignore(d => d.LossData);
       base.OnModelCreating(modelBuilder);
    }
    

    【讨论】:

    • 该更改似乎并未影响添加迁移。我仍然收到相同的错误消息。如果我执行“add-migration migration1 -verbose”,我会得到如下响应:构建开始...构建成功...设置应用程序基本路径[...]查找 DbContext 类...使用上下文“ApplicationDbContext”,然后是错误信息。如您所示,我在 base.OnModelCreating(modelBuilder) 之前将您的代码添加到 ApplicationDbContext 的 OnModelCreating 中
    猜你喜欢
    • 2021-10-28
    • 2016-09-30
    • 2016-03-16
    • 2014-02-03
    • 2012-03-11
    • 2013-09-07
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多