2016-02-13 108 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。 它具有方便的多对多映射并且通常更强大。