エンティティフレームワークの列名とプロパティのマッピングdbentry

c# entity-framework entity-framework-core

質問

私はDbContextでエンティティを保存しながらエンティティのプロパティをデータベースの列名にマップしようとしていますが、EF7でエンティティのプロパティを設定する方法はわかりません。

移行でデータベーススキーマを生成した後、列名はオブジェクト内のプロパティ名と必ずしも同じではありません。たとえば、以下のオブジェクトスキーマ:

public class Document
{
    [Key]
    public int Id { get; set; }

    public string Name { get; set; }

    public User Author { get; set; }
}

IdNameAuthorIdの各列がデータベースにあります。次に、EntityEntryプロパティを反復処理するときに、ID、Name、およびAthorIdの各列が含まれています。私は簡単にIDと名前をマップすることができます。
私が探しているのは、EntityEntryの "AuthorId"がDocumentのAuthorフィールドにマップされていることを理解する方法です。



Backround :EntityEntries( DbContextの SaveChanges ()のChangeTracker )から変更された列を取得し、適切な列と新しい値を保存する汎用オブジェクトバージョン履歴メカニズムを実装しています。次に、オブジェクトを復元するときに、これらの変更を適切なエンティティフィールドにマップできるはずです。

私はEF6に似た質問を見つけました。Entity Frameworkはプロパティ名とSQLで選択した列の間のマッピングをどこに保存しますか?それは非常に複雑で、EF6固有のクラスを使用します。

人気のある回答

私のコメントによると、 Authorフィールドは単純なオブジェクト/構造体(IE: DateTimeEnumなど)ではなく、プリミティブ(IE: intstringなど)でもありません。したがって、これはNavigation Propertyあり、オブジェクトのIDのみが格納されます。このIDを使用すると、 Authorオブジェクトの複雑なデータを格納する別のテーブルの行に移動できます。

したがって、あなたはDbContextDbSetのようにしたいでしょう:

public class Document {
    public int Id { get; set; } // No need for [Key] ID is auto detected
    public string Name { get; set; }

    // Foreign Keys
    public int AuthorId { get; set; } // Can use "int?" if you want to allow it to be nullable
    public User Author { get; set; }
}

public class Author {
    public int Id { get; set; }
    public string Name { get; set; }
}

public class BookContext : DbContext {
    public DbSet<Author> Authors { get; set; }
    public DbSet<Document> Documents { get; set; }
}

これはテーブルを生成します:

Document: Id (int), Name (nvarchar), AuthorId (int) with FK to Author table
Author:   Id (int), Name (nvarchar)

DBを照会するとき:

var books = BookContext.Documents // Access documents table
                 .Include(q => q.Author) // Ensure that the author's properties are loaded, not just the ID
                 .Where(q => q.Name.Contains("SomeText")) // Search for documents with a name matching this text


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow