1

組織構造を表すグループの階層を構築しています。トップレベルのグループが 1 つあり、そこに複数のサブグループがあります。各サブグループは、任意の数のサブグループを持つことができます。

2 つのテーブルを持つ SQL データベースをセットアップしました。

次の列を持つグループ。

  • ID (整数)
  • 説明 (nvarchar(max))

次の列を持つ GroupChildren。

  • ID (整数)
  • グループ ID (int)
  • ChildGroupId (整数)

例として、グループ 1 にグループ 2 とグループ 3 の 2 つのサブグループがある場合、グループ テーブルには 3 つのレコードがあります。

  • ID - 1、説明 - グループ 1
  • ID - 2、説明 - グループ 2
  • ID - 3、説明 - グループ 3

GroupChildren テーブルには 2 つのレコードがあります

  • Id - 主キー ID、GroupId - 1、ChildGroupId - 2
  • Id - 主キー ID、GroupId - 1、ChildGroupId - 3

これにより、2 つの子グループがグループ 1 にリンクされます。これを表す 2 つの POCO クラスが次のようになります。

public class Group
{
    public int Id { get; set; }
    public string Description { get; set; }
    public virtual ICollection<GroupChild> GroupChildren { get; set; }
}

public class GroupChild
{
    public int Id { get; set; }
    public int GroupId { get; set; }
    public Group ChildGroup { get; set; }
}

次のように設定されたこれらのクラスの両方のマッパーを作成しました

internal class GroupMapper : EntityTypeConfiguration<Group>
{
    internal GroupMapper()
    {
        HasKey(t => t.Id);

        Property(t => t.Id).HasColumnName("Id").IsRequired();
        Property(t => t.Description).HasColumnName("Description").IsRequired();

        ToTable("Groups");
    }
}

internal class GroupChildMapper : EntityTypeConfiguration<GroupChild>
{
    internal GroupChildMapper()
    {
        HasKey(g => g.Id);

        Property(g => g.Id).HasColumnName("Id").IsRequired();
        Property(g => g.GroupId).HasColumnName("GroupId").IsRequired();

        HasRequired(g => g.ChildGroup)
            .WithMany()
            .Map(x => x.MapKey("ChildGroupId"))
            .WillCascadeOnDelete(false);

        ToTable("GroupChildren");
    }
}

呼び出すグループとサブグループを取得するには

return GetDbSet<Group>()
    .Where(c => c.Id == id)
    .Single();

これにより、ID と説明を含むグループが返されますが、GroupChildren プロパティを見ると次のエラーが発生します。

列名 'Group_Id' が無効です。
列名 'Group_Id' が無効です。

列 'Group_Id' は、コードまたはデータベースのどこにも存在しません。他の投稿を見てこれを解決しようとしましたが、EF がプライマリ/外部キーの値を解釈する方法であると示唆する人もいますが、これを解決する方法が見つかりませんか?

ありがとう

4

1 に答える 1

0

Invalid column name 'Group_Id'エラーが発生する理由public int GroupId { get; set; }は、ChildGroup.

public int GroupId { get; set; }から削除してみてくださいChildGroup。フレームワークが関係を処理する必要があります。更新されたモデルに一致するようにデータの移行を完了すると、フレームワークによってテーブルにGroup_ID列が作成さGroupれ、関係が設定されていることがわかります。

于 2012-11-23T08:17:44.867 に答える