1

我最近经历了改造我的数据库的过程,规范了很多实体。显然,我现在的桌子比以前多了几张。我在网站上使用的很多数据都是只读的,因此使用视图可以很容易地进行非规范化,但是有些实体可以从非规范化检索中受益,但仍需要更新。

这是一个例子。

A User may be a Member
A Member may have a Profile
A Member may have an Account 

此外,我还有 3 个进一步的查找表。

总共有 3 个用户表和 4 个成员表。

理想情况下,我可以从上面的表中创建 2 个视图。

但是,用户需要更新,属于成员的实体也是如此。此外,还有 6 个与用户/成员相关联的单独表格,即 FavouriteCategories,它们也需要不时检索和更新。

我正在努力想出最好、最有效的方法。

我不能简单地使用视图并将所有实体和查找带入模型,但我将依赖 EF 来生成检索查询。我读过的东西表明 EF 并不擅长处理连接数据。

我可以添加视图和表格,仅使用表格进行更新。由于模型的重复、复杂性以及对 EF 模型功能的利用不足,这似乎很草率。

也许我可以使用只读视图进行数据检索并创建存储过程。我相信将 EF 与存储过程一起使用的过程有点麻烦,所以我可能会保持存储过程与 EF 不同,并简单地传递参数并通过传统方法调用 SP。这又像是一个中途的房子。

我对 .net 或 EF 没有那么丰富的经验,因此对于我上面提到的方法或任何更好的技术来实现这一点,我将不胜感激。我不想在这个阶段破解 edmx 文件,因为......好吧,这只是错误的。

我有一些实体可以从正确的解决方案中受益。用户示例是最简单的示例之一,因此从正确的方法中可以获得很多好处。

帮助和建议将不胜感激。

4

1 回答 1

1

你想用EF吗?如果是,则使用第一种方法,根本不使用视图并允许 EF 处理所有内容,或者使用最后一种方法,使用视图和映射存储过程进行插入、更新和删除操作。

将用于读取的映射视图和用于修改的映射表结合起来也是可能的,但它主要是第一个解决方案(允许 EF 处理所有内容)以及用于某些查询优化的附加视图。

你不会找到更清洁的方法。提到的方法是您问题的有效解决方案。唯一的问题是您是想自己编写 SQL(查看和存储过程)还是让 EF 来做。

最糟糕的方法是使用 EF 进行查询和手动调用存储过程以进行更新,但在某些情况下它也很有用。

于 2012-06-05T12:14:37.513 回答