0

次のDbスクリプトを確認してください。

CREATE TABLE tlogdata
(
    logentryid INT NOT NULL, -- PK
    [key] NVARCHAR(25) NOT NULL, -- PK
    value NVARCHAR(MAX) NOT NULL
)

CREATE TABLE tlogentry
(
    logentryid INT IDENTITY(1,1) NOT NULL, -- PK
    [message] NVARCHAR(4000) NOT NULL
)

tlogentrydataには、複合PK=>logentryidとキーがあります。logentryidはtlogentry.logentryid列を参照します

今私がしたいのは、次のようなモデルを作成することです。

public class LogEntryData
{
    public string Key { get; set; }
    public string Value { get; set; }
}

public class LogEntry
{
    public int Id { get; set; }
    public string Message { get; set; }
    public List<LogEntryData> Data { get; set; } 
}

ご覧のとおり、LogEntryDataにはプロパティとして「LogEntryID」が含まれていません。だから私の質問は、どうすれば(流暢なAPIを使用して)これらの2つのクラスをテーブルにマッピングできますか?列の1つをパブリックプロパティとして公開せずにLogEntryDataに複合PKがあることをEFに伝えることさえ可能かどうかはわかりません(この場合、LogEntryIdはLogEntryDataクラスには存在しませんが、logentryid列としてtlogentrydataテーブルに存在します)

前もって感謝します!

4

1 に答える 1

1

不可能です。モデルのプロパティとして、常に完全なキーを公開する必要があります。マッピングは、次の方法で実現できます。

modelBuilder.Entity<LogEntryData>()
    .HasKey(led => new { led.LogEntryId, led.Key });

modelBuilder.Entity<LogEntry>()
    .HasMany(le => le.Data)
    .WithRequired()
    .HasForeignKey(led => led.LogEntryId);
于 2013-02-27T18:32:02.953 に答える