2016-02-13 36 views
2

我正在關注this教程,以便爲我的WPF應用程序實現本地數據庫(使用SQLite)。WPF與EF和SQLite的多對多關係

儘管我有一個邏輯問題,但我不知道如何使用此方法解決問題,但一切正常。我會在下面簡化它。我有兩個共享多對多關係的表(A,B),因此也需要JOIN表(ABJoin)。

但是在我的實際代碼中,我只想使用2個模型:A和B,每個模型都有另一個類型的列表。就像這樣:

public class A { 
    // ...fields 
    List<B> bList; 
} 

public class B { 
    // ...fields 
    List<A> aList; 
} 

如何能將它EF + SQLite的實施?

在線搜索,我找到了一些解決方案,但沒有適用於SQLite,所以我不知道他們如何工作。

+0

你試過了嗎? –

+0

它不關心WPF –

+0

您應該使用另一個表或實體來建立多對多的關係。 – Mashtani

回答

0

如果您使用多對多連接表,那麼您的每個類應該有一個連接表的列表。

它無法按照您的想法工作。

+0

連接表充當具有多對多關係的兩個實體之間的橋樑。如果你正在使用實體框架,那麼你將有導航性能如下從A到達到B. A.AB.B和 B.AB.A 希望幫助 –

0

你確定不要有第三個實體是個好主意嗎?

假設您的兩個實體是DepartmentStoreProduct,這是n:n關係的典型示例。一家百貨公司可以銷售很多產品,並且一個產品可能在許多百貨公司有售。這導致第三個實體連接上面的兩個實例,在上面的例子中,這個實例就像ProductAvailability。 如果您仔細考慮它,那麼您可能會意識到新的連接實體可能具有其自己的屬性。在我的示例中,這可能是NumberOfProducts,它將指出某個百貨商店中產品的可用數量。

根據我的經驗,連接實體具有超出僅連接兩個其他實體的實際價值是相當普遍的。

我也看了你的例子,它關於AlbumArtist實體。 您想創建一個數據模型,其中Album可以由多個Artist創建嗎?

0

實體框架沒有自動的多對多映射。 除此之外,您可以將A和B映射爲中間表作爲一對多。

如果您沒有義務只使用EF,我建議嘗試使用NHibernate ORM。 它具有方便的多對多映射並且通常更強大。