Используя ASP.NET MVC и Entity Framework, я сталкиваюсь с некоторыми ошибками присоединения/отсоединения, когда мне это нужно для записи изменений в базу данных.
Сначала вот как я получаю записи из моего репозитория:
public PublishedApplication GetPublishedApplication(int id)
{
return dal.ExecuteFirstOrDefault(
context.PublishedApplication.Include("Customers")
.Where(w => w.Id == id));
}
Обратите внимание, что он не отсоединен и имеет MergeOption = AppendOnly.
В другом месте я вызываю метод в своем репозитории, чтобы привязать клиента к приложению:
public void AttachCustomer(int applicationId, int customerId)
{
var app = new PublishedApplication{ Id = applicationId};
var customer = new Customer { Id = customerId};
try
{
context.AttachTo("PublishedApplication", app);
context.AttachTo("Customer ", customer );
app.Customers.Add(customer);
context.SaveChanges();
}
catch
{
throw;
}
}
Это, конечно, дает мне ошибку, что объекты (приложение и клиент) уже привязаны к контексту объекта.
Поэтому мне нужно отсоединить мои объекты в моем репозитории. Это также более правильно, поскольку мне не нужно разбрасывать «информацию, связанную с запросом» по сети. Но как я могу это сделать? Если я отсоединю объект в своем методе GetPublishedApplication
, мой график связанных данных будет потерян, а я не могу себе этого позволить. Мне нужен этот график в другом месте на моем сайте. Также нельзя использовать параметр слияния NoTracking
.
Итак, какие варианты у меня есть?
Заранее спасибо!