C# 使用自定义配置扩展OnModelCreating

C# 使用自定义配置扩展OnModelCreating,c#,entity-framework,ef-fluent-api,C#,Entity Framework,Ef Fluent Api,我有这个问题。现在我正在开发一个旧的软件,将它从VB移植到C 问题是数据库处于horid状态。没有外键,没有主键 不管怎样,现在我的同事正在处理数据库。但在他完成之前,我必须继续编码我的角色。但是我不能没有这个该死的数据库,这需要几个月的时间。所以我有EF自动生成模型 然后我想从上下文中继承,并将fluentapi添加到我的新上下文中,并通过EntityConfiguration和部分类实体修复我需要的内容 问题是,它就是不起作用 以下是我的背景: public partial class Db

我有这个问题。现在我正在开发一个旧的软件,将它从VB移植到C

问题是数据库处于horid状态。没有外键,没有主键

不管怎样,现在我的同事正在处理数据库。但在他完成之前,我必须继续编码我的角色。但是我不能没有这个该死的数据库,这需要几个月的时间。所以我有EF自动生成模型

然后我想从上下文中继承,并将fluentapi添加到我的新上下文中,并通过EntityConfiguration和部分类实体修复我需要的内容

问题是,它就是不起作用

以下是我的背景:

public partial class DbTmContext : BaseContext
{
    public DbTmContext() : base()
    {
        Database.SetInitializer<DbTmtContext>(null);
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new ATrialTypeConfiguration());
        modelBuilder.Configurations.Add(new OTrialTypeConfiguration());
    }
}
因此,要使用EF,我只需要

        using(Repository<OTrial> sql = new Repository<OTrial>())
        {
            var otrial = sql.Get(522726); <<<<< IS OK
            var atrial = otrial.ATrial; <<<<< WILL BE NULL
        }

谢谢您的帮助。

您可能正在寻找下面的include方法示例:

public static IQueryable<ATrial> GetAll(){
     return context.ATrials
         .Include(t => t.OTrials);
 }
您所做的是处理实体的通用方法,但默认情况下不包括相关实体

编写一个特定的getter,在本例中使用include检索相关实体

编辑是相关单据


希望有帮助。

您能展示一下您用来获取实体的代码吗?好的……我将添加编辑。如果答案对您有帮助,请不要忘记向上投票并标记为有效答案:这没有帮助。我的问题不是include bot不存在的关系。您好,添加.include时,我得到一个System.InvalidOperationException:指定的include路径无效。EntityType“Model.OTrial”未声明名为“ATrial”的导航属性。这是一个关于如何使用EF获取相关实体的示例。继续阅读在我的编辑中添加的文档并继续尝试,您将对其进行排序。不建议使用字符串作为导航属性。使用lambda表达式。Includet=>t.OTrials@bolkay如果你是对的,我编辑了我的答案。我想你不明白我的问题。这些关系在数据库中不存在,只有列a存在,并且模型已经生成。所有这些事情我都无能为力,所以我创建了新的继承上下文。
public class Repository<TEntity> : SqlUnit, IRepository<TEntity> where TEntity : class
{
    public TEntity Get(int id)
    {
        try
        {
            return Context.Set<TEntity>().Find(id);
        }
        catch (Exception)
        {
            throw;
        }
    }
}
        using(Repository<OTrial> sql = new Repository<OTrial>())
        {
            var otrial = sql.Get(522726); <<<<< IS OK
            var atrial = otrial.ATrial; <<<<< WILL BE NULL
        }
public static IQueryable<ATrial> GetAll(){
     return context.ATrials
         .Include(t => t.OTrials);
 }