Я пытаюсь отобразить класс, в котором у меня есть список связанных элементов и выбранный связанный элемент. По сути, у меня есть рабочий процесс с набором задач, и в любой момент времени одна из этих задач выбирается в качестве текущей задачи.
public class Flow
{
public int FlowId { get; set; }
public int CurrentFlowTaskId { get; set; }
public bool IsActive { get; set; }
public virtual FlowTask CurrentFlowTask { get; set; }
public virtual ICollection<FlowTask> FlowTasks { get; set; }
}
public class FlowTask
{
public int FlowTaskId { get; set; }
public int FlowId { get; set; }
public string Discription { get; set; }
public virtual Flow Flow { get; set; }
}
И мое отображение выглядит так:
public class FlowMap : EntityTypeConfiguration<Flow>
{
public FlowMap()
{
HasKey(x => x.FlowId);
Property(x => x.IsActive).IsRequired();
HasOptional(x => x.CurrentFlowTask)
.WithOptionalPrincipal()
.WillCascadeOnDelete(false);
HasMany(x => x.FlowTasks)
.WithRequired(x => x.Flow)
.HasForeignKey(x => x.FlowId)
.WillCascadeOnDelete(false);
}
}
public class FlowTaskMap : EntityTypeConfiguration<FlowTask>
{
public FlowTaskMap()
{
HasKey(x => x.FlowTaskId);
Property(x => x.Discription).HasMaxLength(25).IsRequired();
}
}
Это создает миграцию, которая выглядит следующим образом:
CreateTable(
"dbo.Flows",
c => new
{
FlowId = c.Int(nullable: false, identity: true),
CurrentFlowTaskId = c.Int(nullable: false),
IsActive = c.Boolean(nullable: false),
})
.PrimaryKey(t => t.FlowId);
CreateTable(
"dbo.FlowTasks",
c => new
{
FlowTaskId = c.Int(nullable: false, identity: true),
FlowId = c.Int(nullable: false),
Discription = c.String(nullable: false, maxLength: 25),
Flow_FlowId = c.Int(),
})
.PrimaryKey(t => t.FlowTaskId)
.ForeignKey("dbo.Flows", t => t.Flow_FlowId)
.ForeignKey("dbo.Flows", t => t.FlowId)
.Index(t => t.FlowId)
.Index(t => t.Flow_FlowId);
Первое, что здесь не так - столбец Flow_FlowId
, созданный в задачах потока.
Когда я запускаю следующий блок кода в LinqPad, я не вижу ожидаемых результатов; Flow
и FlowTask
созданы, но Flow.CurrentTaskId
имеет значение NULL, а для столбца off Flow_FlowId
установлено то же значение, что и Flow.FlowId
var fi = new CompWalk.Data.FlowTask
{
Discription = "Task 1",
};
var f = new CompWalk.Data.Flow {
IsActive = true,
CurrentFlowTask = fi,
FlowTasks = new[] {
fi
}
};
Flows.Add(f);
SaveChanges();
Этот код был адаптирован из почти идентичного вопроса здесь , но ему уже несколько лет, поэтому он может быть неприменим.
Возможно ли то, что я пытаюсь сделать, не делая несколько вставок и сохранений?
Кроме того, что вызывает генерацию столбца Flow_FlowId
?