【问题标题】:Can I have navigation properties based on certain fields (not primary keys!, unique or foreign keys)?我可以拥有基于某些字段的导航属性(不是主键!、唯一键或外键)吗?
【发布时间】:2014-05-05 17:36:32
【问题描述】:

假设我们有 2 张桌子

public class Table1
{
    [Key]
    public int ID { get; set; }

    public int ID2 { get; set; }

    public int ID3 { get; set; }
}

public class Table2
{
    [Key]
    public int ID { get; set; }

    public int ID2 { get; set; }

    public int ID3 { get; set; }
}

列 ID 是 Table1 和 Table2 中的主键,就是这样!

现在,我想创建一个关系(不在数据库中!);我只是想对 EntityFramework 说这两张表之间存在关系。

所以,我希望 Table2 中的 ID2 是外键,并引用 Table1 中的不是列 ID,而是 列 ID2

这可能吗?

EDIT2

我知道有可能像

public class Table2
{
    //...

    public int ID2 { get; set; }

    [ForeignKey("ID2")]
    public Table1 Table1 { get; set; }

    //...
}

public class Table1
{

    //...

    public virtual ICollection<Table2> Table2 { get; set; }

    //...
}

我成功地为某个 Table1 行扩展了所有 Table2 行。

sql的join会是这样的:Table1.ID = Table2.ID2; 我需要它像 Table1.ID2 = Table2.ID2

【问题讨论】:

  • 这对我来说没有任何意义。你想对ef“撒谎”,搞这么假的关系干什么?
  • 因为我处理的模型...有一个表提供了这些虚假关系,并且该表经常更改。因此,只要此表发生更改,我就会使用控制台应用程序生成模型。阅读编辑2

标签: c# entity-framework ef-code-first foreign-keys navigation-properties


【解决方案1】:

我最终为 A 表创建了 2 个视图并将这些视图映射到 EF 实体。第一个视图有 ID 作为主键,第二个视图有 ID2 作为主键。显然,第二个视图是用于扩展所有 Table2 行的视图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多