簡體   English   中英

EF Core,FromSqlRaw 給出與查詢不同的結果

[英]EF Core, FromSqlRaw gives different result than query

我在 do.net 5 中使用 EF core 5,我的 FromSQLRaw 調用有這種奇怪的行為。 當我調用表值 function 時。

我第一次調用它一切都很好,它使用我的日期參數正確,但是當我調用它更新它時,它似乎生成了正確的查詢,但結果與初始調用相同,即使我調用它有一個不同的日期。

當我跑

query.ToQueryString()

它返回我期望的查詢,當在其他一些軟件中運行它時,我也得到了我期望的結果。 所以我的 SQL 字符串沒問題。

public async Task<List<OverUnderAfdækningModel>> HentOverUnder(DateTime date)
        {
            var dateParam = new SqlParameter("@Dato", date);
            var query = mOHandelsDbContext.OverUnderAfdæknings.FromSqlRaw("SELECT * From [MO_Handelsdata].[OverUnder].OverUnderAfdækning(@Dato)", parameters: new[] { dateParam });
            var result = await query.ToListAsync();
            return result ;
            
        }

在我的啟動文件中

services.AddDbContext<MOHandelsDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("MO_Handelsdata")));

我的服務構造函數看起來像

public OverUnderAfdækningService(MOHandelsDbContext _mOHandelsDbContext, MORammerDbContext _mORammerDbContext)
        {
            mOHandelsDbContext = _mOHandelsDbContext;
            mORammerDbContext = _mORammerDbContext;
        }

我從 Blazor 調用該服務,如下所示,其中 UpdateData 綁定到一個按鈕,而 SelectedDate 是一個綁定到日期選擇器的 DateTime

protected override async Task OnInitializedAsync()
    {

        await getData();
    }
async Task UpdateData()
    {
        OverUnderAfdækninger.Clear();
        getData();
    }
async Task getData()
    {

        OverUnderAfdækninger = await OverUnderAfdækningService.HentOverUnder(SelectedDate);
    }

我的 dbcontext 看起來像

public class MOHandelsDbContext : DbContext
    {
        public virtual DbSet<OverUnderAfdækningModel> OverUnderAfdæknings { get; set; }

        public MOHandelsDbContext(DbContextOptions<MOHandelsDbContext> options) : base(options)
        {

        }


        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder
                .Entity<OverUnderAfdækningModel>(builder =>
                {
                    builder.ToTable("OverUnderAfdækningModel");
                });

        }
    }

這是緩存的問題。

在查詢后面添加 AsNoTracking() 為我修復了它

var query = mOHandelsDbContext
.OverUnderAfdæknings
.FromSqlInterpolated($"SELECT * From [MO_Handelsdata].[OverUnder].OverUnderAfdækning({date})")
.AsNoTracking();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM