4

私は2つのテーブルを持っています:

  • ドキュメント(ID、DocumentTypeId、タイトル、詳細)
  • DocumentTypes (ID、名前、説明)。

DocumentTypeId は DocumentTypes テーブルを参照する外部キーです。つまり、すべてのドキュメントにタイプを割り当てる必要があります。

私は2つのクラスを持っています:

public class Document
{
    public string Id { get; set; }
    public string Title { get; set; }
    public DocumentType DocumentType { get; set; }
}

public class DocumentType
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
}

そして、私は構成を持っています

internal class DocumentsConfiguration : EntityTypeConfiguration<Document>
{
    public DocumentsConfiguration()
    {
        ToTable("Documents");
        HasKey(document => document.Id);
        Property(document => document.Id).HasColumnName("Id");

        HasRequired(document => document.DocumentType);//????????

        Property(document => document.Title).HasColumnName("Title").IsRequired();
    }
}

そして、これは機能していません。次のエラー メッセージが表示されます。

Invalid column name 'DocumentType_Id'

fk 列の名前を DocumentType_Id に変更すると、次のエラー メッセージが表示されます。

Invalid column name 'DocumentTypeId'

私の質問は、このような一対多の関係をどのように設定するのですか? つまり、ドキュメントの種類が異なる多くのドキュメントが必要です。

4

1 に答える 1

6

まず、この変更を行います。ナビゲーションプロパティは次のようにする必要がありますvirtual

public class Document
{
    public string Id { get; set; }
    public string Title { get; set; }
    public virtual DocumentType DocumentType { get; set; }
}

次に、構成を次のように変更します。

internal class DocumentsConfiguration : EntityTypeConfiguration<Document>
{
    public DocumentsConfiguration()
    {
        HasRequired(document => document.DocumentType)
            .WithMany()
            .Map(e => e.MapKey("DocumentTypeId"));
        Property(document => document.Title).HasColumnName("Title").IsRequired();
        ToTable("Documents");
    }
}

慣例によりすでに想定されているため、フィールドのHasKeyまたはProperty呼び出しは必要ありません。この構成でIdは、テーブルに列が必要です。DocumentId

于 2012-09-17T12:13:44.667 に答える