无法实现数据库模型关系
Unable to implement database model relationships
我的 postgres 应用程序有问题。
对于背景,我正在尝试实现这个数据库模型:
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
public List<Post> Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int BlogId { get; set; }
public Blog Blog { get; set; }
}
我能够在 Postgres 中正确地创建数据库,将我的 .Net 应用程序连接到数据库等。唯一阻碍我的是在我保存对象之后:
var blog = new Blog();
blog.Url = "UrlTest";
var post = new List<Post>();
var entry = new Post();
post.Title = "Entry Title";
post.Add(entry);
blog.Posts = post;
context.Blog.Add(blog);
context.SaveChanges();
只是一个简单的一对多关系。保存更改后,我查询上下文,它能够看到我刚刚创建的博客和 Post 之间的关系。
不幸的是,当我重新启动我的 .Net Core 应用程序并尝试列出所有博客时,它将显示为空,但是当我转到数据库服务器并查询时 Post table 我能够确认它仍然有博客 ID。
我尝试了以下所有建议,但没有任何效果:
Entity framework code-first null foreign key
编辑:
这是我的 DbContext:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>();
modelBuilder.Entity<Post>();
modelBuilder.Entity<Blog>()
.HasMany(c => c.Post)
.WithOne(c => c.Blog)
.HasForeignKey(c => c.BlogId)
.OnDelete(deleteBehavior: DeleteBehavior.Cascade);
base.OnModelCreating(modelBuilder);
}
public DbSet<Post> Posts { get; set; }
public DbSet<Blog> Blogs { get; set; }
我还尝试将虚拟放在博客模型的列表和 Post 模型的博客上,但没有成功
这个答案实际上来自 Mustafa Gursel 对我 post - docs.microsoft.com/en-us/ef/core/querying/related-data
的评论
我不确定它是与 Postgres 相关还是 .net 核心,因为我在 .Net MVC 4 和 MSSQL 上的经验是除了声明 "virtual" 之外我不需要声明延迟加载。
在这种情况下,我需要安装 Entity Framework 代理以使其在不进行预加载的情况下工作。
我的 postgres 应用程序有问题。 对于背景,我正在尝试实现这个数据库模型:
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
public List<Post> Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int BlogId { get; set; }
public Blog Blog { get; set; }
}
我能够在 Postgres 中正确地创建数据库,将我的 .Net 应用程序连接到数据库等。唯一阻碍我的是在我保存对象之后:
var blog = new Blog();
blog.Url = "UrlTest";
var post = new List<Post>();
var entry = new Post();
post.Title = "Entry Title";
post.Add(entry);
blog.Posts = post;
context.Blog.Add(blog);
context.SaveChanges();
只是一个简单的一对多关系。保存更改后,我查询上下文,它能够看到我刚刚创建的博客和 Post 之间的关系。
不幸的是,当我重新启动我的 .Net Core 应用程序并尝试列出所有博客时,它将显示为空,但是当我转到数据库服务器并查询时 Post table 我能够确认它仍然有博客 ID。
我尝试了以下所有建议,但没有任何效果: Entity framework code-first null foreign key
编辑: 这是我的 DbContext:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>();
modelBuilder.Entity<Post>();
modelBuilder.Entity<Blog>()
.HasMany(c => c.Post)
.WithOne(c => c.Blog)
.HasForeignKey(c => c.BlogId)
.OnDelete(deleteBehavior: DeleteBehavior.Cascade);
base.OnModelCreating(modelBuilder);
}
public DbSet<Post> Posts { get; set; }
public DbSet<Blog> Blogs { get; set; }
我还尝试将虚拟放在博客模型的列表和 Post 模型的博客上,但没有成功
这个答案实际上来自 Mustafa Gursel 对我 post - docs.microsoft.com/en-us/ef/core/querying/related-data
的评论我不确定它是与 Postgres 相关还是 .net 核心,因为我在 .Net MVC 4 和 MSSQL 上的经验是除了声明 "virtual" 之外我不需要声明延迟加载。
在这种情况下,我需要安装 Entity Framework 代理以使其在不进行预加载的情况下工作。