sql-server - 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");
我错过了什么?
解决方案
推荐阅读
- excel - Excel图表。如何转换图例的数据类型并格式化
- python - 创建一个 Plotly 按钮以在 ScatterPlot 中隐藏/显示数据点
- python - WinError193 %1 不是有效的 Win32 应用程序
- javascript - 在 JavaScript 中为一组属性和值获取哈希或唯一键的最佳(有效)方法是什么?
- arrays - 如何从matlab数组中的每8个值中获取平均值?
- python - 如何在python中更改字符串的前5个字符?
- java - MongoDB 提取文档
- python-3.x - 如何计算元数据并将其添加到现有 Elasticsearch 索引?
- r - ggplot barplot 按组给出百分比
- visual-studio-code - 如何跳过代码服务器中的 VS Code 入门演练?