c# - 使用 EF Core 加载未映射的属性

标签 c# entity-framework entity-framework-core

我尝试通过调用存储过程使用 EF Core 加载实体。
实体通过流利映射映射到表,该表不包含存储过程选择的所有列。

在实体配置中忽略不作为表列存在的选定字段,如下所示:

        modelBuilder.Entity<CustomerLocationEntity>().Ignore(c => c.Latitude);
        modelBuilder.Entity<CustomerLocationEntity>().Ignore(c => c.Longitude);
        modelBuilder.Entity<CustomerLocationEntity>().Ignore(c => c.Radius);
        modelBuilder.Entity<CustomerLocationEntity>().Ignore(c => c.Distance);

存储过程是这样调用的:
await SalesContext.CustomerLocation
            .FromSql("GetCustomersByLocation @latitude={0}, @longitude={1}, @radius={2}", lat,
                lon, radius)
            .ToListAsync();

执行查询时,忽略的列不会映射到实体。在调用存储过程时是否有可能将忽略的字段映射到实体,或者我是否必须为存储过程或类似的东西创建另一个实体?

最佳答案

当您在列上使用 fluent api 的 ignore 方法时,它不会在 sql server 中创建该列(忽略它)。
您的存储过程结果将根据您创建的查询为您提供一些列
并且这些列名称必须与实体上的属性名称匹配。
例如,您的过程为您提供了一个包含这些列的表,并且还匹配了 sql server 和您的类中的数据类型:

  • 纬度
  • 经度
  • 半径
  • 距离

  • 然后你应该为你的过程创建一个类:
    public class LocationProcedure {
       public string Latitude {get;set;}
       public string Longitude {get;set;}
       public string Radius {get;set;}
       public string Distance {get;set;}
    }
    

    并使用 [NotMapped] 将这种类型的 dbset 添加到您的 dbContext属性:
    [NotMapped]
    public DbSet<LocationProcedure> CustomerLocation {get; set:}
    

    该属性告诉这不应该是数据库中的表。

    最后,您可以将您的过程与新的 dbset CustomerLocation 一起使用。然后它将结果映射到 LocationProcedure 类。
    await SalesContext.CustomerLocation
                .FromSql("GetCustomersByLocation @latitude={0}, @longitude={1}, @radius={2}", lat,
                    lon, radius)
                .ToListAsync();
    

    关于c# - 使用 EF Core 加载未映射的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52255743/

    相关文章:

    sql-server - 我可以使用备份/恢复来移动使用 EF Code First 创建的数据库吗?

    c# - 在使用 EF Core 时使用 [ForeignKey] 访问相关表而实际上在数据库中没有外键

    c# - 如何更改 Entity Framework Core 2.2 中的 ILazyLoader 实现?

    c# - C# 中的 Word 自动化语法

    c# - 从 URL 读取 XML 文件,结果为空

    c# - 该操作对交易状态无效

    entity-framework - Unity 的 PerResolveLifetimeManager,用于存储库、工作单元和 Entity Framework DBContext

    nhibernate - 说服顽固的DBA将ORM用于大多数CRUD与存储过程, View 和函数

    c# - 每个类型表中的级联删除 (TPT) EF Core 5

    c# - 如何使用 Windows 窗体数据网格更新数据库? ( Visual Studio 2010)