簡體   English   中英

在 EF Core 3.1 中定義可為空的擁有類型時,為什么會出現 NullReferenceException?

[英]Why do I get a NullReferenceException when defining a nullable owned type in EF Core 3.1?

我正在使用 Entity Framework Core 3.1.4 連接到 Cosmos DB 實例。
我有一個廣播class ,其中包含一個擁有類型的屬性Availability
我不希望將可用性映射為實體。 可用性沒有 ID,也不應該存儲在自己的容器中。 可用性是可以為空的 這些類看起來像:

public class Broadcast
{
    public string id {get; set;}
    public string Name { get; set; }
    public Availability Availability { get; set; }
}

[Owned]
public class Availability
{
    public DateTime? Start { get; set; }
    public DateTime? End { get; set; }
}

public class BroadcastContext : DbContext
{
    public DbSet<Broadcast> Broadcast{ get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Broadcast>().OwnsOne(e => e.Availability).WithOwner();
    }
}

因此,DB 中 Broadcast 容器內的項目應如下所示:

{
   id: "GUID",
   Name: "Foobar Broadcast",
   Availability: {
     Start: FooDate,
     End: BarDate
   }
}

當嘗試添加新的廣播object 並將“可用性”設置為 null 時,此行: modelBuilder.Entity<Channel>().OwnsOne(e => e.Availabilities).WithOwner(); 拋出以下異常:

System.NullReferenceException:“對象引用未設置為 object 的實例。”

我了解 EF Core 3.0 支持可為空的擁有類型。
我錯過了什么嗎? 我該如何解決這個問題?

在 EF 中使用導航屬性時,您希望使用 virtual 關鍵字。 這將允許 EF 對該屬性執行覆蓋。

嘗試將廣播更改為以下內容:

public class Broadcast
{
    public string id {get; set;}
    public string Name { get; set; }
    public virtual Availability Availability { get; set; } //added virtual keyword.
}

暫無
暫無

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

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