Entity Framework Core - EF Core 2.2 - 'Point.Boundary' 属于接口类型('IGeometry')

Posted

技术标签:

【中文标题】Entity Framework Core - EF Core 2.2 - \'Point.Boundary\' 属于接口类型(\'IGeometry\')【英文标题】:Entity Framework Core - EF Core 2.2 - 'Point.Boundary' is of an interface type ('IGeometry')Entity Framework Core - EF Core 2.2 - 'Point.Boundary' 属于接口类型('IGeometry') 【发布时间】:2019-05-10 08:35:03 【问题描述】:

我正在尝试使用 EF Core 2.2 的新功能。它基于以下文章。 “宣布实体框架核心 2.2” https://blogs.msdn.microsoft.com/dotnet/2018/12/04/announcing-entity-framework-core-2-2/

我安装了以下 Nuget 包。

我将以下内容添加到我的模型中。

using NetTopologySuite.Geometries;


//New as of EF.Core 2.2 
//[Required] 
//[NotMapped] 
public Point Location  get; set; 

在我的应用程序启动期间,我的数据库上下文中的以下行出现以下错误: 数据库.EnsureCreated();

System.InvalidOperationException H结果=0x80131509 Message=属性“Point.Boundary”属于接口类型(“IGeometry”)。如果它是导航属性,则通过将其转换为映射实体类型手动配置此属性的关系,否则使用“OnModelCreating”中的 NotMappedAttribute 或“EntityTypeBuilder.Ignore”忽略该属性。 来源=Microsoft.EntityFrameworkCore

【问题讨论】:

我也有这个问题。 .net 核心 2.2 与实体框架核心 2.2。运行 add-migration 时出现错误 【参考方案1】:

您需要致电UseNetTopologySuite()。此处示例:

public class ApplicationDbContext : IdentityDbContext

    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    

    

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    
        IConfigurationRoot configuration = new ConfigurationBuilder()
           .SetBasePath(Directory.GetCurrentDirectory())
           .AddJsonFile("appsettings.json")
           .Build();
        var connectionString = configuration.GetConnectionString("DefaultConnection");
        optionsBuilder.UseSqlServer(connectionString, opts => opts.UseNetTopologySuite());
    
    public DbSet<Test> Tests  get; set; 



public class Test

    public int Id  get; set; 
    public Point Location  get; set; 

我遇到了这个问题,因为我有一个 if (!optionsBuilder.IsConfigured) 在我的 OnConfiguring 中的所有内容。我必须删除它才能让add-migrations 工作。

【讨论】:

【参考方案2】:

正如 Kyle 指出的,您需要调用 UseNetTopologySuite(),但我会在 ConfigureServices 期间这样调用它:

public class Startup

    public void ConfigureServices(IServiceCollection services)
    
        services
            .AddEntityFrameworkNpgsql()
            .AddDbContext<MyDBContext>(opt =>
                opt.UseNpgsql(Configuration.GetConnectionString("MyDBConnection"),
                                o=>o.UseNetTopologySuite()))
            .BuildServiceProvider();
        ...
    
    ...

【讨论】:

以上是关于Entity Framework Core - EF Core 2.2 - 'Point.Boundary' 属于接口类型('IGeometry')的主要内容,如果未能解决你的问题,请参考以下文章

Linux 上的 C# DotNet Entity Framework Core Migrations 错误

在 ASP.NET Core 中使用 Entity Framework 6

使用 Entity Framework Core (2.1) 调用标量函数的最佳实践

如何在dotnet core Entity Framework中对多个表的数据进行GroupBy操作?

Entity Framework Core 6.0 预览4 性能改进

Entity Framework Core快速开始