EF中的SaveChanges()会导致未添加的对象被插入吗?
本文关键字:对象 添加 插入 SaveChanges 中的 EF | 更新日期: 2023-09-27 18:06:23
我有一些代码,这是我第一次为实际的工作项目做TDD的结果。为了尝试引导,我创建了一个实体模型和测试,断言数据记录的存在需要具体化一个报告,这是我确定的第一个具体目标。
我认为它工作得相当好,直到我发现代码看起来像有bug,而然而测试仍然通过。
下面是代码片段:这个bug(我认为)是缺少对AddObject()的调用。
如果有人有耐心/有兴趣看一看全文,我把它粘贴成一个要点。
测试代码:
TestFactory target = new TestFactory(@"data source=biz2'da;initial catalog=DirectAgents;integrated security=True;");
DirectAgentsEntities actual = target.Create();
Assert.IsNotNull(actual);
var advertisers = actual.Advertisers.OrderBy(c => c.Id).ToList();
Advertiser advertiser1 = advertisers.ElementAt(0);
Assert.AreEqual("Advertiser 1", advertiser1.Name);
实现代码:
public TestFactory(string connectionString)
{
this._connectionString = connectionString;
}
public DirectAgentsEntities Create()
{
CleanUp(this.DirectAgentsEntities);
AddAdvertiserClients();
var db = this.DirectAgentsEntities;
return db;
}
private void AddAdvertiserClients()
{
var db = this.DirectAgentsEntities;
Advertiser a;
a = new Advertiser
{
Name = "Advertiser 1",
Client = db.Clients.First(c => c.Name == "Client 1")
};
db.SaveChanges();
}
private DirectAgentsEntities DirectAgentsEntities
{
get
{
string entityConnectionFormat = @"metadata=res://*/Formss.AB2.Model.ABModel.csdl|res://*/Formss.AB2.Model.ABModel.ssdl|res://*/Formss.AB2.Model.ABModel.msl;provider=System.Data.SqlClient;provider connection string=""{0};multipleactiveresultsets=True;App=EntityFramework""";
string entityConnectionString = String.Format(entityConnectionFormat, _connectionString);
return new DirectAgentsEntities(entityConnectionString);
}
}
private string _connectionString;
如何在不调用AddObject的情况下添加行?我是否应该仔细检查我的代码,寻找一个细微的bug?
我相信你的意思是,在创建了Advertiser
之后,你觉得需要一个AddObject
?
如果我误解了你的问题,我道歉。
当您将Advertiser
链接到Client
时,生成的代码中发生的情况是,Advertiser
也被添加到关系另一端的Client.Advertisers
集合中。
这将被记录为Client
对象上的更改,并由SaveChanges
调用保存。