无法实现数据库模型关系

时间:2019-06-25 05:35:00

标签: asp.net-core entity-framework-core npgsql

我的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();

简单直接的一对多关系。保存更改后,我查询上下文,它可以查看我刚刚创建的Blog和Post的关系。

不幸的是,当我重新启动.Net Core App并尝试列出所有Blog时,它将显示为null,但是当我转到数据库服务器并查询Post表时,我能够确认它仍然具有Blog ID。 / p>

我尝试了以下所有建议,但最终无济于事: 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; }

我还尝试将虚拟放在Blog模型的List和Post Model的Blog中,但没有用

1 个答案:

答案 0 :(得分:0)

此答案实际上来自于Mustafa Gursel对我的帖子-docs.microsoft.com/zh-cn/ef/core/querying/related-data

的评论。

我不确定它是Postgres相关的还是.net核心,因为我在使用MSSQL的.Net MVC 4上的经验是,除了声明“虚拟”之外,我不需要声明延迟加载。

在这种情况下,我需要安装Entity Framework Proxy才能在不进行急切加载的情况下正常工作。