第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Entity Framework Core:`SqlNullValueException:數(shù)據(jù)為空。

Entity Framework Core:`SqlNullValueException:數(shù)據(jù)為空。

C#
繁星淼淼 2022-12-31 13:55:58
我在 ASP.NET Core 應(yīng)用程序和控制器操作中使用 Entity Framework Core,我沒有對(duì)工作代碼或數(shù)據(jù)庫進(jìn)行任何更改,但我無法判斷 Entity Framework Core 執(zhí)行的查詢是什么??刂破鲃?dòng)作:[HttpGet]// GET: Administration/Companiespublic async Task<ActionResult> Index(){    var users = await UserManager.Users.ToListAsync();    var companyEditVMs = await DB.Companies    .OrderBy(company => company.CompanyId == 1         ? "_" + company.CompanyName         : company.CompanyName    )    Select(a => new CompanyEditVM(HttpContext, a, users.Where(b => b.CompanyId == a.CompanyId)))    .ToListAsync();    return View(companyEditVMs);}痕跡SqlNullValueException: Data is Null. This method or property cannot be called on Null values.System.Data.SqlClient.SqlBuffer.get_String()System.Data.SqlClient.SqlDataReader.GetString(int i)lambda_method(Closure , DbDataReader )Microsoft.EntityFrameworkCore.Storage.Internal.TypedRelationalValueBufferFactory.Create(DbDataReader dataReader)Microsoft.EntityFrameworkCore.Query.Internal.AsyncQueryingEnumerable<T>+AsyncEnumerator.BufferlessMoveNext(DbContext _, bool buffer, CancellationToken cancellationToken)Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.ExecuteAsync<TState, TResult>(TState state, Func<DbContext, TState, CancellationToken, Task<TResult>> operation, Func<DbContext, TState, CancellationToken, Task<ExecutionResult<TResult>>> verifySucceeded, CancellationToken cancellationToken)我什至試著做 just var companies = await DB.Companies.ToListAsync()。我有完全相同的例外。也許我希望能夠獲取 EF Core 執(zhí)行的查詢以手動(dòng)執(zhí)行此操作,以便我可以嘗試找出查詢有什么問題。我想知道可能發(fā)生了什么。特別是因?yàn)槿匀豢梢詮臄?shù)據(jù)庫中獲取用戶或國家等其他實(shí)體。知道如何解決實(shí)際的潛在問題嗎?
查看完整描述

5 回答

?
子衿沉夜

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊

錯(cuò)誤消息表明 EF Core 正在嘗試讀取所需string屬性的值,即不應(yīng)在數(shù)據(jù)庫中具有值的屬性,而是底層數(shù)據(jù)讀取器在某些記錄中報(bào)告該屬性的值。nullnull

查看您的實(shí)體模型和相應(yīng)的數(shù)據(jù)庫表,您可以看到許多string屬性 ->varchar列的明顯差異。CompanyStreetAddressCompanyCityCompanyZipCodeCompanyVatNumberContactFirstNameContactLastName- 所有這些都[Required]在模型中標(biāo)記為,但在表中沒有相應(yīng)not null的約束。

所以問題是由這些列中的一個(gè)或多個(gè)引起的。

您需要修復(fù)該差異 - 可能通過刪除[Required]屬性來解決,因?yàn)楝F(xiàn)有數(shù)據(jù)中的約束已被破壞。

它在某些較舊的 EF Core 版本中“有效”這一事實(shí)并不重要——這是不正確的映射,因此應(yīng)該修復(fù)。從技術(shù)上講,它不應(yīng)該從一開始就起作用。但請(qǐng)記住,EF Core 仍在積極開發(fā)中,并且有許多錯(cuò)誤將在下一個(gè)版本中修復(fù)。很可能在“工作”和“非工作”EF Core 版本之間進(jìn)行了一些代碼更改,這修復(fù)了以前的不正確行為。


查看完整回答
反對(duì) 回復(fù) 2022-12-31
?
慕斯709654

TA貢獻(xiàn)1840條經(jīng)驗(yàn) 獲得超5個(gè)贊

如果您嘗試從數(shù)據(jù)庫中讀取一些可為空的數(shù)據(jù),但您的類型不可為空,則可能會(huì)出現(xiàn)此錯(cuò)誤。


如果MyInt在數(shù)據(jù)庫中可以為空并且您有此實(shí)體:


public class MyEntity

{

    public int Id { get; set; }

    public int MyInt { get; set; }

}

你會(huì)得到例外:System.Data.SqlTypes.SqlNullValueException: 'Data is Null. This method or property cannot be called on Null values.'


MyInt要解決此問題,只需將屬性的類型更改為Nullable<int>or int?:


public class MyEntity

{

    public int Id { get; set; }

    public int? MyInt { get; set; }

}

注意:這不是對(duì)原問題的回答,而是對(duì)標(biāo)題中問題的回答。


查看完整回答
反對(duì) 回復(fù) 2022-12-31
?
守著一只汪

TA貢獻(xiàn)1872條經(jīng)驗(yàn) 獲得超4個(gè)贊

如果您從 C# 8 啟用最新的 Nullable 功能,也會(huì)出現(xiàn)這種異常。

EF Core,至少目前,它與 C# 8 可空類型不完全兼容。因此,例如,假設(shè)您為項(xiàng)目啟用了 Nullable 功能,如果您有這樣的類型:

public class MyEntity{
   public string MyProperty { get; set; }
}

即使該屬性標(biāo)記 [Required] 屬性,EF 核心也會(huì)引發(fā)此類異常,因?yàn)樗?em>要求數(shù)據(jù)庫中的值不為空(即它不使用 IsDbNull 測試列值)。

有關(guān)如何在 EF 核心中處理可空引用類型的更多信息,請(qǐng)查看: https ://learn.microsoft.com/en-us/ef/core/miscellaneous/nullable-reference-types


查看完整回答
反對(duì) 回復(fù) 2022-12-31
?
婷婷同學(xué)_

TA貢獻(xiàn)1844條經(jīng)驗(yàn) 獲得超8個(gè)贊

為了解決類似的Data is Null異常問題,我必須明確地放置IsRequired(false)我的列映射。在我的例子中,我正在映射一個(gè)數(shù)據(jù)庫視圖。

builder.Property(x => x.MyProperty).IsRequired(false);


查看完整回答
反對(duì) 回復(fù) 2022-12-31
?
慕雪6442864

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊

解決方案:是的,錯(cuò)誤“SqlNullValueException:數(shù)據(jù)為空?!?當(dāng)模型將導(dǎo)致問題的字段標(biāo)記為 [Required] 時(shí),當(dāng)(表的)列包含 NULL 時(shí)引起...使用數(shù)字字段可以輕松解決問題,但當(dāng)字段類型為字符串時(shí)問題非常糟糕。 .


想想下面2個(gè)類,用了一個(gè)分配路線的例子,每條路線都有一個(gè)司機(jī),當(dāng)然每個(gè)司機(jī)都有1條或多條路線。


public class Route

    {

        public int id { get; set; }       

        public string RouteName { get; set; }


        [Required] \\==> FIELD CAUSING THE PROBLEM

        public string UsuarioId { get; set; }


        public virtual Usuario Driver { get; set; }

}


public class Usuario

    {

        public string Id {get;set;

        public string Name { get; set; }                

        public virtual List<Route> Routes { get; set; } = new List<Route>();


    }


你可能猜到了,一個(gè) Route 可以有一個(gè) driver(或者我稱之為 Usuario),但是一個(gè) Driver 可以有多個(gè) route,這就構(gòu)成了一對(duì)多的關(guān)系,如下所示:


protected override void OnModelCreating(ModelBuilder modelBuilder){            


     base.OnModelCreating(modelBuilder);


     modelBuilder.Entity<Usuario>()

        .HasMany<Route>(usuario => usuario.Routes)

        .WithOne(route => route.Driver)

        .HasForeignKey(route => route.UsuarioId)

        .OnDelete(DeleteBehavior.SetNull);

                

}


根據(jù) FluentAPI,刪除驅(qū)動(dòng)程序時(shí),行為是將 UsuarioId 字段(在 Routes 模型中)設(shè)置為 NULL,但這違反了 [Required] 屬性。所以我們將無法刪除 Users(或 Drivers)表中的記錄。此外,如果我們?cè)跀?shù)據(jù)庫中已有數(shù)據(jù),在本例中,Routes with NULL UsuarioId,它會(huì)立即顯示錯(cuò)誤。


請(qǐng)記住,重點(diǎn)是:我們希望 [Required] 僅用于驗(yàn)證目的,因?yàn)槲覀兛赡軗碛猩形捶峙浣o驅(qū)動(dòng)程序(UserId)的路由,因此在數(shù)據(jù)庫中,它應(yīng)該被允許為 NULL ,而不是我們的 mvc 形式。


要解決此問題,請(qǐng)將該字段標(biāo)記為 [required],然后轉(zhuǎn)到您使用 Fluent API 定義關(guān)系的 DbContext 類,并指定該列不是必需的,如下所示:


modelBuilder.Entity<Route>()

   .Property(p => p.UsuarioId).IsRequired(required: false);


因此該字段現(xiàn)在在注釋模式下是必需的,但最終將用于構(gòu)建數(shù)據(jù)庫的流式 API 不需要該字段。這將解決問題!


查看完整回答
反對(duì) 回復(fù) 2022-12-31
  • 5 回答
  • 0 關(guān)注
  • 553 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)