2

私はこのようなモデルを持っています:

public class Entity
{
    [Key, Required]
    public virtual long EntityId { get; set; }
    [Required]
    public virtual string Name { get; set; }
    public virtual long? ParentEntityId { get; set; }
}

これが私のテーブルです:

create table Entities(
    EntityId bigint not null identity(1, 1),
    Name nvarchar(64) not null,
    ParentEntityId bigint null
)

ParentEntityIdは、EntityIdへの外部キーです。

エンティティエンティティを作成しようとすると、これは例外です。 Invalid column name 'ParentEntity_EntityId'.

EFがその特定の列にその規則を選択している理由はわかりませんが、これを行うと、次のようになります。

[Column("TryPickThisName")]
public virtual int? ParentEntityId { get; set; }

同じエラーが「TryPickThisName」列名でも表示されます。最後に、列名を正しく書き込む、属性を削除すると、元のエラーメッセージが表示されます。

4

1 に答える 1

5

モデルの一部を省略しましたか?

何が起こっているのかというと、自己参照テーブルを作成したいと思っていると思います。EntityがParentEntityを持っている場合は、オプションでそれ自体を参照します。

FKプロパティをナビゲーションプロパティに明示的にマップしなかったため、EFはParentEntity_EntityIdを作成しています。ForeignKeyデータ注釈を追加すると、これが修正されます。

public class Entity
{
    [Key, Required]
    public virtual long EntityId { get; set; }
    [Required]
    public virtual string Name { get; set; }

    [ForeignKey("ParentEntity")]
    public virtual long? ParentEntityId { get; set; }
    public virtual Entity ParentEntity { get; set; }
}

このデータベースを作成します: ここに画像の説明を入力してください

于 2012-09-17T16:47:50.623 に答える