首页 > 解决方案 > 实体框架一对多关系不起作用

问题描述

我最近开始学习 ASP.NET,现在是学习 Entity Framework 的时候了,但是我在一对多的关系上遇到了一些麻烦。我知道已经有相同的问题,但我试图按照答案进行操作,但仍然无法使其发挥作用。

我有这两个实体:

public class Map
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Place> Places { get; set; } = new List<Place>();
}

public class Place
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long Id { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public double Latitude { get; set; }
    public double Longitude { get; set; }
    public virtual Map Map { get; set; }
    public long MapId { get; set; }
}

并且关系定义如下:

protected override void OnModelCreating(ModelBuilder builder)
{
    builder.Entity<Place>()
        .HasOne(p => p.Map)
        .WithMany(m => m.Places)
        .HasForeignKey(p => p.MapId);
}

但无论我做什么,集合Places总是空的:

var map = _dataContext.Maps
                      .Where(map => map.Id == id)
                      .Include(o => o.Places)
                      .SingleOrDefault();

如果有人可以帮助我,我会很感激。

编辑:sql迁移输出

CREATE TABLE IF NOT EXISTS "__EFMigrationsHistory" (
    "MigrationId" character varying(150) NOT NULL,
    "ProductVersion" character varying(32) NOT NULL,
    CONSTRAINT "PK___EFMigrationsHistory" PRIMARY KEY ("MigrationId")
);

START TRANSACTION;

CREATE TABLE "Maps" (
    "Id" bigint GENERATED BY DEFAULT AS IDENTITY,
    "Name" text NULL,
    CONSTRAINT "PK_Maps" PRIMARY KEY ("Id")
);

CREATE TABLE "Places" (
    "Id" bigint GENERATED BY DEFAULT AS IDENTITY,
    "Title" text NULL,
    "Description" text NULL,
    "Latitude" double precision NOT NULL,
    "Longitude" double precision NOT NULL,
    "MapId" bigint NOT NULL,
    CONSTRAINT "PK_Places" PRIMARY KEY ("Id"),
    CONSTRAINT "FK_Places_Maps_MapId" FOREIGN KEY ("MapId") REFERENCES "Maps" ("Id") ON DELETE CASCADE
);

CREATE INDEX "IX_Places_MapId" ON "Places" ("MapId");

INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion")
VALUES ('20210909132715_init', '5.0.9');

COMMIT;

标签: c#asp.netentity-framework

解决方案


好的,所以我有点笨,在记录 sql 查询后我发现它Include不起作用并意识到我只有一个错误,错误的导入......

坏的 -using System.Data.Entity;

好的 -using Microsoft.EntityFrameworkCore;

我很惊讶没有人抱怨这个进口。


推荐阅读