2012-09-23 42 views
3

我们目前拥有一个数据库非常大的系统,存储过程同时用于CUD和查询。数据集用于从SP查询中检索结果。在实体框架中加入数据的存储过程

现在我们正在研究使用实体框架针对同一数据库开发另一个项目。查询数据库时,存储过程通常会执行大量连接来收集不在目标表中的某些字段,但会以某种方式收集客户端所需的连接表中的数据。使用DataSet时,SP返回的所有字段都包含在DataTable中。所以DataTable实际上并不匹配目标数据库表。

在EF中处理这种情况的正确方法是什么?在创建我的模型时,实体映射到每个表,如上所述,有时只与SP的结果相匹配。我可以将SP查询结果的“附加”字段作为属性添加到实体类,并将它们填充到查询中,但是在特定实体类型的CUD中排除了这些属性?看起来像EF方式,如果通过LINQ to Entities而不是SP查询,将会有具有关联属性的实体实例,以便通过导航关系属性来使用这些“附加”属性?

回答

0

您可以定义任意复杂类型(只是对你产生的一类,以匹配存储过程返回的列和数据类型)作为返回类型为实体框架(存储过程作为第4版和更新) - 这里没有问题。

请参阅Stored Procedures in the Entity Framework以获得与在Entity Framework中使用存储过程相关的所有内容的详细说明。

+0

但复杂的类型不能与EF作为可跟踪实体交互,对吗?我需要能够对实体执行CUD操作,我只需要它们携带一些未跟踪的额外信息。 – nobba

+0

@nobba:复杂类型是一个“容器”类,用于容纳从存储过程返回的数据。它们本身并不是实体 - 但它们确实可以与现有的EF实体进行交互。你为什么认为他们不能? –

+0

对不起,我似乎把其他类型的复杂类型混淆了。最好的方法是将源自其他表的“额外属性”映射到复杂类型,然后将其添加到主实体中?因为我不想只以复杂的类型结束。 – nobba