Entity Framework: POCO и инкапсуляция кода IQueryable - PullRequest
0 голосов
/ 20 мая 2011

Вопрос об удобной организации кода.

Я переместил свои классы POCO в независимый от персистентности проект.Должен ли я перемещать код IQueryable (часть «бизнес-правил» вокруг этих POCO, используемых, например, для генерации производного непостоянного бизнес-объекта) вместе или лучше оставить весь код IQueryable в библиотеке с ObjectContext?

1 Ответ

2 голосов
/ 20 мая 2011

В своем комментарии вы говорите: «Это означает, что библиотека, не зависящая от персистентности, может содержать выражения IQueryable, которые« не выполняются / не тестируются »без уровня персистентности ...».Это не правда.Вы можете тестировать выражения IQueryable (главным образом) независимо от постоянства.

Например:

public IQueryable<Foo> SomeFoos(IQueryable<Foo> foos, string aValue)
{
    return from foo in foos 
           where foo.Bar = aValue
           select foo;
}

Вы можете использовать это с L2E:

var f = SomeFoos(myContext, "Baz");

Вы можете проверить это с L2O:

var expected = new Foo { Bar = "Baz" };
var notExpected = new Foo { Bar = "Oops" };
var input = new [] { expected, notExpected };

var actual = instance.SomeFoos(input.AsQueryable(), "Baz");

Assert.AreEqual(actual.First(), expected, "Should have found expected record.");
Assert.AreNotEqual(actual.Single(), notExpected, "Should not have found unexpected record.");

Этоэто выдуманный пример, но, надеюсь, суть ясна: как вы структурируете это, решать вам, как утверждает @Ladislav.

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