我在數據庫中有三個實體(EntityA,EntityB,EntityC)和它們各自的表(TableA,TableB,TableC)。我也有一個現有的連接表,它有三個ID列(TableA_ID,TableB_ID,TableC_ID)。EF 4.1 Fluent API。如何在使用具有三個id列的現有連接表時映射兩個實體?
MODELS:
public class EntityA
{
public Guid EntityA_ID { get; set }
.....
// Each EntityA can be associated with 0 or Many EntityB
public virtual ICollection<EntityB> EntityBCollection { get; set; }
}
public class EntityB
{
public Guid EntityB_ID { get; set; }
.....
// Each EntityB can be associated with 0 or Many EntityA
public virtual ICollection<EntityA> EntityACollection { get; set; }
// Each EntityB can be assocated with 0 or Many EntityC,
// but it becomes 0 or 1 when EntityB is associated with an EntityA
public virtual EntityC EntityC { get; set; }
}
public class EntityC
{
public Guid EntityC_ID { get; set; }
......
// Each EntityC an only be associated with a EntityB
// an EntityC does not exist on its own
public virtual EntityB EntityB { get; set; }
}
DATA CONTEXT:
modelBuilder.Entity<EntityB>()
.HasOptional(entityb => entityb.EntityC)
.WithRequired(entityc => entityc.EntityB)
.Map(map =>
{
map.ToTable("ThreeIDColumnJoinTable").MapKey(new string[]{"EntityA_ID", "EntityB_ID", "EntityC_ID"});
});
我不斷收到以下錯誤:
在代碼中,如下實體與
Unable to determine the principal end of an association between the types 'EntityC' and 'EntityB'. The principal end of this association must be explicitly configured using either the relationship fluent API or data annotations.
我如何能重新配置數據上下文映射任何想法等等它不會產生一個錯誤,它還會包含ThreeIDColumnJoinTable中指定的EntityA的關係?
難道你沒有連接表條目的實體嗎?另外我認爲你濫用最後一行中的Map方法。此版本僅用於映射外鍵列名稱(請參閱Intellisense中的說明)。 – Slauma 2012-01-16 18:06:27
Slauma,沒有爲連接表創建一個實體,因爲我以前從來沒有必須(爲了直接推進兩列的多對多關係)。此外,「地圖」代碼是我所能想到的所有不同前提下的最後一次嘗試。我會嘗試創建連接表實體以查看還會出現什麼內容。謝謝。 – fuzzlog 2012-01-16 18:44:35
是的,對於多對多連接表,您不需要實體。但是這個表格必須有精確的*兩個*列,這些列形成一個組合鍵,並且是相關表格的FK。沒有其他類型的連接表是被允許的。 – Slauma 2012-01-16 18:49:07