EF Code First:只设置外键(ID)并获得导航属性的空集合
本文关键字:导航 属性 集合 空集 ID First Code 设置 EF | 更新日期: 2023-09-27 18:08:00
感谢您的回复,为了更明确,我重新整理了我的问题如下:
public class App
{
[Key]
public Guid Id { get; set; }
public virtual IEnumerable<Build> Builds { get; set; }
}
public class Build
{
[Key]
public Guid Id { get; set; }
public Guid AppId { get; set; }
[ForeignKey("AppId")]
public virtual App App { get; set; }
}
public class TestContext : DbContext
{
public TestContext() : base("name=DefaultConnection")
{
Database.SetInitializer<TestContext>(new CreateDatabaseIfNotExists<TestContext>());
}
public DbSet<App> Apps { get; set; }
public DbSet<Build> Builds { get; set; }
}
步骤1> Save Data
class Program
{
static void Main(string[] args)
{
using (TestContext context = new TestContext())
{
var id = Guid.NewGuid();
App app = new App() { Id = id };
Build build = new Build()
{
Id = Guid.NewGuid(),
AppId = id
};
context.Apps.Add(app);
context.Builds.Add(build);
context.SaveChanges();;
}
}
}
步骤2>获取数据
class Program
{
static void Main(string[] args)
{
using (TestContext context = new TestContext())
{
var builds = context.Apps.FirstOrDefault().Builds;
Console.Read();
}
}
}
var构建得到一个空值,而我检查数据库,外键值保存得很好
我的猜测是,您正在使用即时加载,并没有为该属性指定Include()
(可能),这将看起来像
context.Apps.Where(...).Include(a => a.Builds).ToList()
或者您正在使用显式加载并且没有调用Load()
(不太可能)。
这可能是你的本地EF没有刷新App的新集合。你可能需要从数据库中刷新App对象。
如何刷新DbContext