C# 实体框架代码优先-外键数组

C# 实体框架代码优先-外键数组,c#,entity-framework,C#,Entity Framework,我有一个实体和一个其他实体的列表。 其他实体是只读的,只是一个简单的关联。 这意味着实体应该只有一个其他实体ID的列表,仅此而已。 我怎样才能做到这一点,以便以后能有尽可能简单的更新图 public class Worker { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int ID { get; set; } public string Name { get; se

我有一个实体和一个其他实体的列表。 其他实体是只读的,只是一个简单的关联。 这意味着实体应该只有一个其他实体ID的列表,仅此而已。 我怎样才能做到这一点,以便以后能有尽可能简单的更新图

 public class Worker
 {
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ID { get; set; }

    public string Name { get; set; }

    public double Age { get; set; }

    public int? ManagerID { get; set; }

    [ForeignKey("ManagerID")]
    public virtual Worker Manager { get; set; }

    /// <summary>
    /// This is just an association to the tasks. 
    /// An update graph should ignore the entity itself since 
    /// the task is immutable in this context!!!
    /// </summary>
    public virtual ICollection<Task> AssignedTasks { get; set; }
}

public class Task
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ID { get; set; }

    public string TaskName { get; set; }

    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }

    /// <summary>
    /// This is just an association to the workers. 
    /// An update graph should ignore the entity itself 
    /// since the worker is immutable in this context!!!
    /// </summary>
    public virtual ICollection<Worker> AssignedWorkers { get; set; }
}
我只需要实体ID。。。但是集合用于构建DB模式


在上面的示例中-更新时,工作人员只需要更新分配给他的任务ID,而不是其全部数据

您可以将实体的实际列表标记为私有虚拟。这将阻止外部访问。然后将Id列表创建为在实体列表上执行.Selecte=>e.Id操作的属性。只能从父实体内部修改实体列表

这不是一个选择。该模型用于图形创建。我需要类型集合,以便实体框架能够创建关系……我想我不清楚您到底需要什么。似乎您需要一个只读的实体集合和一个要使用的实体ID集合。我说得对吗?你打算以后如何更新图表?我会解释的。拥有嵌套对象时,可以为其创建FK特性。此属性仅保留id和id,如果需要,可以跳过加载整个对象,只保留id。在更新场景中,如果您知道不需要嵌套对象中的任何内容,也不需要其数据,则此属性非常有用。但是,当你有一个这样的对象列表时,你不能像对待单个对象那样只保存它们的ID,这就是我试图找到的。在上面的例子中,在更新时,工作人员只需要更新分配给他的任务ID,而不是它们的全部数据。使用数据传输对象类型的抽象怎么样?创建一个行为符合您要求的对象,然后在使用完该对象后,将其传递到存储库并将数据与实体对齐。这比强迫EF去做一些本来不该做的事情要干净得多。我已经添加了一个例子和进一步的解释。