我最近经历了修改数据库的过程,规范了很多实体。显然我现在有比我更多的桌子了。我在网站上使用的大量数据是只读的,因此使用视图进行非规范化非常简单,但是有些实体可以从非规范化检索中受益,但仍需要更新。
这是一个例子。
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来生成retreival查询。我读过的东西表明EF并不是处理联合数据的最佳选择。
我可以添加视图和表,只使用表进行更新。由于重复,模型复杂以及未充分利用EF模型功能,这看起来很草率。
也许我可以使用readonly视图进行数据检索并创建存储过程。我相信将EF与存储过程一起使用的过程有点像黑客,所以我可能会将存储的过程与EF区分开来并简单地传递params并通过传统方法调用SP。这再次看起来像是一个中途的房子。
我不是那种.net或EF的经验,所以我会对上面提到的方法或任何更好的技术有所了解。我不想在这个阶段攻击edmx文件,因为......好吧,这是错误的。
我有一些实体可以从正确的解决方案中受益。用户示例是最简单的,因此从正确的方法中可以获得很多。
非常感谢帮助和建议。
答案 0 :(得分:1)
你想使用EF吗?如果是,则使用第一种方法完全不使用视图,并允许EF处理所有内容或使用视图和映射存储过程进行插入,更新和删除操作的最后一种方法。
组合映射视图用于读取和映射表以进行修改也是可能的,但它主要是第一个解决方案(允许EF处理所有内容)以及用于某些查询优化的附加视图。
你找不到更清洁的方法。提到的方法是解决您问题的有效方法。唯一的问题是,如果你想自己编写SQL(查看和存储过程)或让EF这样做。
最糟糕的方法是使用EF查询和手动调用存储过程进行更新,但在某些情况下它也很有用。