检查以下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列)
提前谢谢!
答案 0 :(得分:1)
这是不可能的。您始终必须将完整键公开为模型中的属性。然后可以通过以下方式实现映射:
modelBuilder.Entity<LogEntryData>()
.HasKey(led => new { led.LogEntryId, led.Key });
modelBuilder.Entity<LogEntry>()
.HasMany(le => le.Data)
.WithRequired()
.HasForeignKey(led => led.LogEntryId);