为啥 EntityFramework 不添加我的对象?

Posted

技术标签:

【中文标题】为啥 EntityFramework 不添加我的对象?【英文标题】:Why isn't EntityFramework adding my objects?为什么 EntityFramework 不添加我的对象? 【发布时间】:2022-01-07 10:36:33 【问题描述】:

我正在使用AutoBogus 测试数据填充内存数据库,如下所示:

// Create dummy data.
var goalFaker = new AutoFaker<Goal>()
    .RuleFor(g => g.Id, f => f.IndexFaker + 1); // +1 for the non-zero primary key.
var goals = goalFaker.Generate(10);

// Use a dummy in-memory database instead of a real one.
var options = new DbContextOptionsBuilder<GoalContext>()
    .UseInMemoryDatabase(databaseName: "TestDatabase")
    .Options;

// Save our dummy data to our dummy database.
using (var context = new GoalContext(options))

     context.AddRange(goals);
     context.SaveChanges();

但是,数据永远不会保存!它完全被忽略了。

我做错了什么?如何让我的测试数据在测试中持续存在?

【问题讨论】:

【参考方案1】:

我遇到的问题是Goal 是一个抽象类。一旦我切换到虚拟化具体实现,问题就消失了。

// Create dummy data.
var goalFaker = new AutoFaker<SmartGoal>() // <--- Swap in concrete SmartGoal for abstract Goal.
    .RuleFor(g => g.Id, f => f.IndexFaker + 1);
var goals = goalFaker.Generate(10);

// Use a dummy in-memory database instead of a real one.
var options = new DbContextOptionsBuilder<GoalContext>()
    .UseInMemoryDatabase(databaseName: "TestDatabase")
    .Options;

// Save our dummy data to our dummy database.
using (var context = new GoalContext(options))

     context.AddRange(goals);
     context.SaveChanges();

【讨论】:

那很快.. @CaiusJard 我使用了“回答我自己的问题”选项,这很自然。

以上是关于为啥 EntityFramework 不添加我的对象?的主要内容,如果未能解决你的问题,请参考以下文章

为啥Entity Framework没有在使用SingleOrDefault时生成的SQL中添加“where”?

为啥我得到:“未定义的对 `glfwInit' 的引用”?

向 EntityFramework 6 添加视图不起作用?

为啥为了Java改变环境变量后不能运行CMD中的命令

entityframework克隆或将实体实例复制到另一个对象

EntityFramework,在添加到表时获取对象ID