gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 23:15:12 25 4
gpt4 key购买 nike

我尝试通过调用存储过程使用 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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com