я имею проблему с помощью Entity Framework-6. Я два классаКратность нарушение ограничения EF Code First-
public class LinkableState : Entity
{
[Required]
public long LinkableId { get; set; }
[ForeignKey(@"LinkableId")]
public virtual Linkable Linkable { get; set; }
public long Counter { get; set; }
public string Debug { get; set; }
}
и
public class ProcessInstance : InstanceBase<Process>
{
[Required]
public DateTime InstanceStartTime { get; set; }
public DateTime? InstanceEndTime { get; set; }
public ProcessInstanceState InstanceEndState { get; set; } = ProcessInstanceState.None;
public virtual ICollection<LinkableState> LinkableStates { get; set; } = new List<LinkableState>();
public virtual ICollection<LinkableState> LinkableStateTopCounter { get; set; } = new List<LinkableState>();
}
В моем коде я хотел изменить ProcessInstance .LinkableStates как в этом примере (в это время элементы reachedStates отсоединяются)
using (IDataLayer db = StorageFactory.GetStore())
{
ProcessInstance ix = db.GetProcessInstance(processInstanceId);
ix.LinkableStates = reachedStates;
}
если БД OBE jct get расположен и сохранен. Я получаю сообщение об ошибке
Нарушение множественности. Роль 'ProcessInstance_LinkableStates_Source' отношения 'DataLayer.Mssql.DataBase.ProcessInstance_LinkableStates' имеет кратность 1 или 0..1.
Я не знаю, почему EF думает, что существует более 1 отношения? Я проверил файл EDMX (обратный из Code-First), который выглядит следующим образом:
Как вы можете видеть в ДБ-записей ключ ProcessInstance_Id (ProcessInstance.LinkableStates) был обнуляется, даже если идентификатор {1, 3} должен быть установлен с помощью Process.Id = 1.
Эта ошибка произошла пока я перешел от
Configuration.ProxyCreationEnabled = true;
Configuration.LazyLoadingEnabled = true;
к
Configuration.ProxyCreationEnabled = false;
Configuration.LazyLoadingEnabled = false;
На мгновение я не знаю, почему эта ошибка возникает, когда я переключаюсь с ленивой на активную загрузку. Я уже пытался очистить список и добавить новые элементы вручную:
using (IDataLayer db = StorageFactory.GetStore())
{
ProcessInstance ix = db.GetProcessInstance(processInstanceId);
ix.LinkableStates.Clear();
foreach (LinkableState e in unvisitedStates)
{
ix.LinkableStates.Add(e);
}
}
но это ничего не меняет.
У вас есть идеи, как я могу исправить эту проблему?
заранее спасибо :)