WPF 中与 EF 和 SQLite 的多对多关系

本文关键字:关系 SQLite 中与 EF WPF | 更新日期: 2023-09-27 18:34:32

我正在按照本教程为我的WPF应用程序实现本地数据库(使用SQLite(。

一切都按预期工作,尽管我有一个逻辑问题,我不知道如何使用这种方法解决。我将在下面简化它。

在数据库方面,我有 2 个表(A,B(,它们共享多对多关系,因此也需要一个 JOIN 表(ABJoin(。

然而,在我的实际代码中,我只想使用 2 个模型:A 和 B,每个模型都有一个其他类型的列表。喜欢这个:

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

如何在EF+SQLite中实现它?

在网上搜索,我找到了一些解决方案,但没有适用于SQLite的解决方案,所以我不确定它们是如何工作的。

WPF 中与 EF 和 SQLite 的多对多关系

在代码优先中配置多对多关系

如果您使用的是多对多连接表,则每个类都应该有一个连接表的列表。

它不能按照你正在思考的方式工作。

您确定没有第三个实体是个好主意吗?

假设你的两个实体是DepartmentStoreProduct,这是n:n关系的典型例子。百货公司可以销售许多产品,一种产品可以在许多百货公司购买。这导致第三个实体连接上述两个实体,在上面的示例中,这将类似于ProductAvailability。如果您更仔细地考虑它,那么您可能会意识到新的连接实体可能具有自己的属性。在我的示例中,这可能是NumberOfProducts,将说明某个百货商店中产品的可用数量。

根据我的经验,连接实体具有超越连接其他两个实体的真正价值是很常见的。

我还看了你关于AlbumArtist实体的例子。您是否要制作一个数据模型,其中Album可以由多个Artist创建?

实体框架没有自动多对多映射。取而代之的是,您可以将 A 和 B 作为一对多映射到中间表。

如果您没有义务只使用EF,我建议您尝试NHibernate ORM。它具有方便的多对多映射,并且通常功能更强大。