首页 > 解决方案 > C# 联接表在执行后包含 null(.NET Core,EF 数据库优先)

问题描述

我在 .NET Core 中使用带有 Entity Framework 的数据库优先方法,最终使用这个. 一些表与 SQL Server 中的关系导致在代码中加入。

我正要在连接表上获取 DateTime 并想提供一个字符串格式,但要做到这一点,我应该首先执行查询,这样我就可以像这里提到的那样给它一个格式。问题是,为什么连接表在执行后变为空?

为了轻松解释我的问题,这里是代码:

var a = (from p in db.Product
         select s).ToList();
var b = (from p in a
         select p.Brand.DateCreated.ToString("MMMM dd, yyyy")).ToList();
// Brand contains null after execution in "a"

var c = (from p in db.Product
         select p.Brand.DateCreated.ToString("MMMM dd, yyyy")).ToList(); 
// Brand contains data but execution gives error due to DateTime.ToString()

同时,这是我的解决方案,但我需要创建另一个模型。对于这种情况,最终会产生很多模型。

public class ProductBrand 
{
   public class Product { get; set; }
   public class Brand { get; set; }
}
var a = (from s in db.Product
         select new ProductBrand {
             Product = s,
             Brand = s.Brand,
        }).ToList().Select(s => s.Brand.DateCreated.ToString("MMMM dd, yyyy")).ToList();

编辑:

只需更新我的模型即可解决上述问题。但是仍然遇到与上述问题相关的问题。保存新产品时,保存后品牌变为空

为了轻松解释我的问题,这里是代码:

var p = new Product { Name = "temp", BrandId = 1 };
db.Product.Add(p);
db.SaveChanged();
return p.Brand.DateCreated.ToString("MMMM dd, yyyy"); // but Brand is null

同时

var p = new Product { Name = "temp", BrandId = 1 };
db.Product.Add(p);
db.SaveChanged();
if(p.Brand == null) { // Here's my temporary solution, but how about for those tables with lot of joins
   p.Brand = db.Brand.FirstOrDefault(s => s.Id == p.BrandId); 
}
return p.Brand.DateCreated.ToString("MMMM dd, yyyy");

我错过了什么?

标签: sql-serverentity-frameworklambdaasp.net-core-mvc

解决方案


推荐阅读