Может ли SaveChanges () в EF вызывать добавление не добавленных объектов? - PullRequest
3 голосов
/ 20 августа 2011

У меня есть некоторый код, который является результатом моих первых усилий по созданию TDD для реального рабочего проекта.Пытаясь выполнить начальную загрузку, я создал модель сущности и тесты, которые подтверждают наличие записей данных, необходимых для материализации отчета, первой конкретной цели, которую я идентифицировал.как будто в нем есть ошибка, и YET тест все еще проходит .

Вот фрагменты: Ошибка (я думаю) - это отсутствующий вызов 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?Должен ли я присмотреться к своему коду для обнаружения незначительной ошибки?

1 Ответ

3 голосов
/ 20 августа 2011

Я полагаю, вы говорите, что чувствуете, что AddObject необходим после создания Advertiser?
Если я неправильно понял вопрос, мои извинения.

Когда вы связываете Advertiser с Client, в сгенерированном коде происходит то, что Advertiser также добавляется в коллекцию Client.Advertisers на другой стороне отношения.
Это отмечается как изменение объекта Client и сохраняется при вызове SaveChanges.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...