【问题标题】:In Entity Framework, is it possible to "Add Foreign Key Properties to [Table Name] Entitiy" after generating the model?在实体框架中,是否可以在生成模型后“将外键属性添加到 [表名称] 实体”?
【发布时间】:2017-06-07 00:26:58
【问题描述】:

我们有一个大型实体模型,已经建立了 x 年,我想知道以下是否可行: 我们有很多旧实体,我们不直接将外键暴露给其他表,但它们在实体框架中有关联。即表 1,与表 2 具有一对多关系,表 2 在数据库表上有一个 Table1_ID 字段,但我无法从我的 C#/Entity Framework 代码中访问它。有没有一种干净的方法来显示/添加它而不删除关联并读取它? 这是在模型优先实体框架中

【问题讨论】:

  • 但我无法从我的 C#/Entity Framework 代码中访问它 为什么不呢?如果这是数据库优先(我认为它不是模型优先,因为您生成 EDMX?),那么该列应该是 EDMX 的一部分,不是吗?
  • @GertArnold 在添加关联时公开生成的列是可选的,这是其他人编写的旧代码并且不包含该属性,因此它在生成的表上,但我不能做 Table2。 Table1_ID,我只能做Table2.Table1,这意味着我需要包含该表才能查询它,而我只需要ID字段。
  • 我的根本问题是,您不能更改代码吗?在类模型中公开原始 FK 属性要容易得多(外键关联与独立关联)。

标签: c# asp.net database entity-framework


【解决方案1】:

您可以使用数据注释并在 Table2 模型上添加属性:

using System.ComponentModel.DataAnnotations.Schema;
...
[Column("Table1_ID")]
public int Table1Id { get; set; }

如果你使用的是fluent api,你可以这样配置:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Table2>() 
        .Property(t => t.Table1Id) 
        .HasColumnName("Table1_ID");
}

然后创建一个新的迁移并删除 UpDown 函数中的所有内容。

public partial class Add_Table1_Reference_To_Table2_Model : DbMigration
{
    public override void Up()
    {
    }

    public override void Down()
    {
    }
}

【讨论】:

  • 抱歉,我忘了说它是模特优先 :( 谢谢你
  • @Thomas - Model First 使用 EDMX 文件,不使用迁移。
  • @ScottBecker,哦,好吧,您使用的是旧版本的 EF。我没有注意到并正确阅读您的问题。对此感到抱歉。
  • @Thomas 很好,抱歉哈哈,我忘了还有比我们的更新的版本。
猜你喜欢
  • 2011-02-14
  • 1970-01-01
  • 2015-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-08
  • 1970-01-01
相关资源
最近更新 更多