2013-02-27 47 views
0

檢查在以下Db的文字中沒有PK屬性:EF地圖一對多複合PK - 在子類

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類中,但作爲logentryid列存在於tlogentrydata表上)

預先感謝您!

回答

1

這是不可能的。您始終必須將完整的密鑰作爲模型中的屬性公開。映射可以通過以下方式實現:

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

modelBuilder.Entity<LogEntry>() 
    .HasMany(le => le.Data) 
    .WithRequired() 
    .HasForeignKey(led => led.LogEntryId); 
+0

我最終在LogEntryData類中添加了LogEntryId,它工作正常。所以謝謝你的答案。 – rzumbado 2013-02-27 18:48:52