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)到我的表中?我不知道是否甚至可以告诉 EF LogEntryData 具有复合 PK 而不将其中一列公开为公共属性(在这种情况下,LogEntryId 在 LogEntryData 类中不存在,但在 tlogentrydata 表中作为 logentryid 列存在)

先感谢您!

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 回答