Я пишу тест базы данных с репозиторием, использующим L2S. В моей базе данных у меня есть объект Manifest
и объект AllocatedTransaction
. Объект AllocatedTransaction имеет внешний ключ для идентификатора Manifest. DDL выглядит примерно так:Linq to SQL datacontext не обновляется для внешних отношений ключей
Manifest:
Id - int - identity
AllocateTransaction:
Id - int - identity
Quantity - int
ManifestId - FK to Manifest
В моем тесте, я проверяю, чтобы увидеть, если AllocatedTransactions возвращаются с манифеста. Тест выглядит следующим образом:
[TestMethod]
public void FindByIdTest()
{
using (data.EZTracDataContext dataContext = new data.EZTracDataContext())
{
using (new TransactionScope())
{
data.Manifest manifest = _testDataProvider.AddManifest(dataContext);
data.AllocatedTransaction allocatedTransaction = _testDataProvider.AddEligibilityAllocated(dataContext, 5, manifest.Id);
ManifestRepository repository = CreateRepository(dataContext);
var actual = repository.FindById(manifest.Id).AllocatedTransactions;
var expected = new[] { new domain.AllocatedTransaction(allocatedTransaction.Id, 5, manifest.Id) }.ToList();
CollectionAssertAreEqual(actual, expected);
}
}
}
_testDataProvider
просто добавляет записи в базу данных, используя принятый в dataContext
. Метод FindById
выглядит следующим образом:
public domain.Manifest FindById(int id)
{
var persistedManifest = GetPersistedManifest(id);
var requestedManifest = GetDomainManifestFromData(persistedManifest);
return requestedManifest;
}
private Manifest GetPersistedManifest(int manifestId)
{
return (from manifests in DataContext.Manifests
where manifests.Id == manifestId
select manifests).FirstOrDefault();
}
Моя проблема манифеста объект возвращается из DataContext не имеет AllocateTransaction, связанный с ним. Странная вещь - ранее существовавшие манифесты do возвращаются с прикрепленными к ним привязанными. Может ли использовать тот же объект DataContext для вставки записей и получения записей? Это ошибка с L2S?
Вызывает ли '_testDataProvider'' SaveChanges() 'в' DataContext', так что 'Manifest' и' AllocatedTransaction' получают свои уникальные идентификаторы? Что произойдет, если вы присоедините новый «манифест» к «AllocatedTransaction», а затем сохраните «AllocatedTransation»? – Jay
'SubmitChanges()' вызывается из '_testDataProvider', а' Manifest' и 'AllocatedTransaction' получают свои идентификаторы. В настоящее время я просто добавляю уникальный идентификатор из «Manifest» при сохранении 'AllocatedTransaction'. Я просто попробовал приложить все «Manifest» и «AllocatedTransaction», как вы сказали, но получил тот же результат. – JChristian
Jay, я думаю, у вас есть это в обратном направлении. На основе образца кода Manifest является родительским объектом, а AllocatedTransaction является дочерним объектом. Вам нужно привязать выделенноеТрансментацию к манифесту, а не наоборот. –