我们目前拥有一个数据库非常大的系统,存储过程同时用于CUD和查询。数据集用于从SP查询中检索结果。在实体框架中加入数据的存储过程
现在我们正在研究使用实体框架针对同一数据库开发另一个项目。查询数据库时,存储过程通常会执行大量连接来收集不在目标表中的某些字段,但会以某种方式收集客户端所需的连接表中的数据。使用DataSet时,SP返回的所有字段都包含在DataTable中。所以DataTable实际上并不匹配目标数据库表。
在EF中处理这种情况的正确方法是什么?在创建我的模型时,实体映射到每个表,如上所述,有时只与SP的结果相匹配。我可以将SP查询结果的“附加”字段作为属性添加到实体类,并将它们填充到查询中,但是在特定实体类型的CUD中排除了这些属性?看起来像EF方式,如果通过LINQ to Entities而不是SP查询,将会有具有关联属性的实体实例,以便通过导航关系属性来使用这些“附加”属性?
但复杂的类型不能与EF作为可跟踪实体交互,对吗?我需要能够对实体执行CUD操作,我只需要它们携带一些未跟踪的额外信息。 – nobba
@nobba:复杂类型是一个“容器”类,用于容纳从存储过程返回的数据。它们本身并不是实体 - 但它们确实可以与现有的EF实体进行交互。你为什么认为他们不能? –
对不起,我似乎把其他类型的复杂类型混淆了。最好的方法是将源自其他表的“额外属性”映射到复杂类型,然后将其添加到主实体中?因为我不想只以复杂的类型结束。 – nobba