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