gpt4 book ai didi

c# - Entity Framework 不填充 key

转载 作者:行者123 更新时间:2023-11-30 23:28:39 25 4
gpt4 key购买 nike

我正在使用 LINQ 和 Entity Framework 从带分隔符的文件导入数据,在一种情况下,EF 没有填充键属性。该类是:

public class BallastType
{
public int BallastTypeId { get; set; }
public string Name { get; set; }
}

该文件包含一个标题行和每个条目的一行。导入它的代码是:

var baseDir = AppDomain.CurrentDomain.BaseDirectory;
var seedDataPath = Path.Combine(baseDir, "bin", "SeedData");

var ballastTypesFile = Path.Combine(seedDataPath, "BallastTypes.txt");
var ballastTypes = (from l in File.ReadAllLines(ballastTypesFile).Skip(1)
let x = l.Split('\t').ToArray()
select new BallastType()
{
Name = x[0]
});
context.BallastTypes.AddRange(ballastTypes);
context.SaveChanges();

运行此代码会插入所有实体,但 BallastTypeId 未初始化 (0)。如果我在选择之后添加 ToList...

...select new BallastType()
{
Name = x[0]
}).ToList();

它按预期工作并且填充了 BallastTypeId。需要注意的是,我正在断点处检查它。

为什么添加 ToList 会导致 EF 按预期工作?我正在使用 EF 6.1.3。

最佳答案

如果没有 .ToList()ballastTypes 是一个 IQueryable,并且仅在您枚举它时才进行计算。如果您在 SaveChanges 之后检查 BallastTypeId 的值,您实际上是在重新运行 LINQ 语句,并重新读取文件的内容。这意味着您在查找插入的 ID 时读取的实体不是您插入到上下文中的实体。

如果您添加一个 .ToList(),则 ballastTypes 变成一个列表而不是一个 IQueryable,并且可以被计算多次。

关于c# - Entity Framework 不填充 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35920779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com