我首先使用實體框架代碼,並且遇到問題,因爲EF使用兩個引用鍵創建Event
表,其中一個用於類ObjectOne
,另一個用於類ObjectTwo
。是否可以將多個關係保存在一個表格列中?
是否可以保留一列中的Id值Event.ObjectId
以及屬性中的關係類型Event.Type
?
我可以做以下映射(其中我只有一列FK)。是否有可能在數據庫中沒有創建FK,因爲現在我必須補充存在於ObjectOne
表和ObjectTwo
表值,它不是爲我一個解決方案):
modelBuilder.Entity<ObjectOne>()
.HasMany(c => c.Events).WithOptional().HasForeignKey(x => x.ObjectId);
modelBuilder.Entity<ObjectTwo>()
.HasMany(c => c.Events).WithOptional().HasForeignKey(x => x.ObjectId);
樣品類:
public class ObjectOne
{
public int ObjectOneId { get; set; }
public ICollection<Event> Events { get; set; }
}
public class ObjectTwo
{
public int ObjectTwoId { get; set; }
public ICollection<Event> Events { get; set; }
}
public class Event
{
public int EventId { get; set; }
public int ObjectId { get; set; }
public string Type { get; set; }
}
public class AddEvent : Event
{
}
public class Updated : Event
{
}
在此先感謝
這是一個**可怕的壞主意**有一個引用一次'TableOne'和另一次'TableTwo'的列。不要這樣做。有**兩個單獨的,重點** FK列有什麼問題?這是一個更清潔的設計 - 你可以有**的實際參考完整性**(你不能用另一種方法做的事情)...... –
嘿嘿我知道這看起來很討厭,但我在源頭看到類似的東西一家公司的代碼,他們在nHibernate中完成,我很好奇是否可以使用EF進行配置。我認爲他們使用這種解決方案是因爲他們有一個Event表和大約一百個與此事件表相關的對象,現在您必須選擇100個FK鍵或2個列?老實說,在這種情況下我真的不知道好的解決方案,也許你可以提出一些建議? –
在這種情況下,您需要擁有兩列/屬性,但無法建立任何關係 - 無論是在數據庫級還是在EF中(因爲FK列可引用100個表中的任何一個......) –