Entity framework MVC-EF逆向工程代码首先包括另一个表

Entity framework MVC-EF逆向工程代码首先包括另一个表,entity-framework,include,ef-code-first,asp.net-mvc-5,reverse-engineering,Entity Framework,Include,Ef Code First,Asp.net Mvc 5,Reverse Engineering,我有一个MVC-EF逆向工程代码优先模型,希望包含另一个使用属性的表 public virtual OtherTableModel OtherTableModel{ get; set; } 但是,当我执行此操作时,会出现以下错误: 显然,如果有一个edmx,有一个简单的方法可以做到这一点。在这种情况下,两个表具有完全相同的主键: string id {get; set} 如何使include命令工作 在我的控制器中,代码是: ourList = db.Table1.Include(t =

我有一个MVC-EF逆向工程代码优先模型,希望包含另一个使用属性的表

 public virtual OtherTableModel OtherTableModel{ get; set; }
但是,当我执行此操作时,会出现以下错误:

显然,如果有一个edmx,有一个简单的方法可以做到这一点。在这种情况下,两个表具有完全相同的主键:

string id {get; set} 
如何使include命令工作

在我的控制器中,代码是:

ourList = db.Table1.Include(t => t.OtherTableModel)
我得到的错误是:

An exception of type 'System.InvalidOperationException' occurred in      
EntityFramework.SqlServer.dll but was not handled in user code

Additional information: A specified Include path is not valid. The 
EntityType Solution1.Models.User' does not declare a navigation property 
with the name 'OtherTableModel'.
注意:我已经研究过这个错误,但是我发现没有一个答案是针对反向工程代码优先的方法的


提前谢谢

您需要在表1中配置关系。如果将其命名为[table]+Id:

public string OtherTableId {get; set;}
public OtherTableModel OtherTableModel {get; set;}
也可以添加注释:

[ForeignKey("Id")]    
public OtherTableModel OtherTableModel {get; set;}
或者您可以使用我喜欢的fluent API:

public class Table1Configuration : EntityTypeConfiguration<Table1>
{
    public Table1Configuration()
    {
        HasRequired(p => p.OtherTableModel)
            .WithMany(p => p.Table1s)
            .HasForeignKey(p => p.Id)
            .WillCascadeOnDelete(false);
    }
}
公共类表1配置:EntityTypeConfiguration
{
公共表1配置()
{
HasRequired(p=>p.OtherTableModel)
.WithMany(p=>p.Table1s)
.HasForeignKey(p=>p.Id)
.WillCascadeOnDelete(假);
}
}

史蒂夫,谢谢你的回答。我检查了注释方法--[ForeignKey(“Id”)]。它工作并运行,但OtherTableModel的许多结果在SQL中不应该为空;不幸的是,在SQL表中,虽然两个表使用相同的键和相同的字符串长度,但它们没有正式的外键关系。。。。因此,如果我使用一个存储过程来检索其他表数据,它会工作,但include会返回一些数据行,而不是所有的数据行(我真的一点也不了解,我认为它会一直工作,或者总是失败)。有人对此有什么见解吗?请在此处查看有关这些空返回的相关问题: