Я использую Сервис RIA в нашем приложении Silverlight. Объекты базы данных напрямую не предоставляются клиенту, но у меня есть набор классов POCO для него. Затем в методах CRUD для этих классов POCO они преобразуются в объекты базы данных и сохраняются в базе данных.
Проблема возникает на стороне сервера, когда клиент создает 2 новых объекта POCO, которые связаны между собой. Метод вставки вызывается на сервере для каждого объекта POCO отдельно, и я могу создать соответствующие новые объекты базы данных и добавить их в контекст объекта. Но я не вижу способа добавить связь между этими созданными объектами базы данных. Есть ли решение для этого?
Например, у меня есть эти 2 сущности POCO (упрощенно):
[DataContract(IsReference = true)]
public partial class Process
{
[DataMember]
[Key]
public string Name
{
get; set;
}
[DataMember]
public long StepId
{
get; set;
}
[DataMember]
[Association("StepProcess", "StepId", "Id", IsForeignKey=true)]
public Step Step
{
get; set;
}
}
[DataContract(IsReference = true)]
public partial class Step
{
[DataMember]
[Key]
public long Id
{
get; set;
}
[DataMember]
public string Name
{
get; set;
}
}
И у меня есть эти 2 метода вставки в классе обслуживания моего домена:
public void InsertProcess(Process process)
{
var dbProcess = new DBProcess();
dbProcess.Name = process.Name;
//dbProcess.StepId = process.StepId; Cannot do that!
this.ObjectContext.AddToDBProcess(dbProcess);
}
public void InsertStep(Step step)
{
var dbStep = new DBStep();
dbStep.Name = step.Name;
this.ObjectContext.AddToDBSteps(dbStep);
this.ChangeSet.Associate<Step, DBStep>
(step, dbStep, (dto, entity) =>
{
dto.Id = entity.Id;
});
}
Клиент добавляет новый процесс, затем создает и добавляет новый шаг к нему, а затем вызывает метод SubmitChanges (). Process.StepId не заполнен с правильным значением, так как еще нет правильного Step.Id для вновь созданного шага, поэтому я не могу просто скопировать это значение в объект базы данных.
Таким образом, вопрос заключается в том, как воссоздать отношения между вновь созданными объектами базы данных так же, как и во вновь создаваемых DTO?
Я знаю об атрибуте Composition, но он нам не подходит. И Процесс, и Шаг являются независимыми объектами (то есть шаги могут существовать без процесса).