Лучше сначала выбрать категорию, потому что это избавит вас от множества возможных проблем, но это не обязательно.Вы можете использовать фиктивный объект категории:
var category = new Category { Id = receivedId };
file.Categories.Add(category);
Вы создадите только новую категорию и установите ее PK.Теперь вам нужно обработать вставку файла, где вы должны явно указать ObjectContext для вставки только файла (поскольку ваши категории существуют в базе данных):
context.Files.Attach(file); // now whole object graph is attached but marked as Unchanged
context.ObjectStateManager.ChangeObjectState(file, EntityState.Added); // mark only file entity as inserted
context.SaveChanges();
Вы также можете выбрать противоположное направление:
context.Files.AddObject(file); // all objects in object graph are marked for insertion
foreach (var category in file.Categories)
{
// you don't want to insert categories again
context.ObjectStateManager.ChangeObjectState(category, EntityState.Unchanged);
}
context.SaveChanges();
Этот сценарий работает, если вы знаете, что все категории существуют в вашей базе данных.Если вы хотите вставить новые категории вместе с сохранением файла, вам нужно сначала запросить категории или добавить некоторую информацию о том, какая категория является новой, а какая существует.