【问题标题】:Entity Framework mapping list of ids实体框架的 id 映射列表
【发布时间】:2016-02-21 19:05:05
【问题描述】:

我现在处于一种奇怪的情况,我有两个实体:

public class Proyect
{
    int id;
    List<int> stages;
}

public class Stage
{
    //PK, not FK to proyect
    int id;
}

我知道这不是建模这种关系的最佳方法 (n->1) 但它是这样做的,我们无法改变它。

有人知道,我如何关联这些实体(符号或覆盖onModelCreation)?

我们正在使用 c#、ET4、VS2012、WS8。

【问题讨论】:

  • id 中的 Stage 是主键还是 Proyect 中的外键?
  • 如果是这样,那么数据库中的架构实际上是什么样的? Proyect 中的阶段列表是如何存储在数据库中的?

标签: c# entity-framework


【解决方案1】:

我喜欢将数据注释用于简单的关系。您必须在 Proyect 表上指定您的键字段,在 Stage 表上指定您的外键。在 Proyect 表中,您应该有一个阶段列表,而不是整数,因为您与 Stage 对象相关。您可以使用 virtual 关键字在相关实体上使用 lazyloading。

如果您确实需要包含您的阶段 ID 的 int 类型列表,只需使用未映射的属性即可。

public class Proyect{
    [Key]
    public int id { get; set;}
    public virtual List<Stage> stages { get; set;}
    [NotMapped]
    public virtual List<int> stageIds {
        get {
            return stages == null ? null : stages.Select(t => t.id).ToList();
        }
    }
}

public class Stage{
    public int id { get; set;}
    [ForeignKey("id")]
    public virtual Proyect Proyect { get; set;}
}

【讨论】:

  • 不幸的是,这将在 OP 的模型中生成一个外键,他在他的帖子中声明(或至少暗示)他们无法更改模型(即“它是以这种方式完成的,我们不能改变它”)。
  • 我假设 OP 无法更改数据库结构。您可以在实体类中定义键,即使它们在数据库中不存在。
猜你喜欢
  • 1970-01-01
  • 2014-04-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-09
  • 2017-10-23
  • 2016-10-11
  • 2021-06-01
  • 2011-12-18
相关资源
最近更新 更多