Entity framework ADO.NET Ef4-如何将实体映射到存储过程而不映射到表

Entity framework ADO.NET Ef4-如何将实体映射到存储过程而不映射到表,entity-framework,entity-framework-4,Entity Framework,Entity Framework 4,我们的数据库层使用ado.net实体框架4.0,我是ado.net实体框架的新手。我通过在实体框架中添加实体创建了实体。我只想将该实体映射为存储过程,而不是数据库的表。存储过程将返回与实体相同的列。如果不映射到表,这是怎么可能的?这里是一个完整的演练这是不可能的,因为ObjectSet是IQueryable,而将ObjectSet映射到存储过程不会给您一个IQueryable,因为存储过程本身就无法组合。最好是将存储过程中的内容放入视图中,并将视图映射到可能的对象集。您需要创建复杂类型,而不是实

我们的数据库层使用ado.net实体框架4.0,我是ado.net实体框架的新手。我通过在实体框架中添加实体创建了实体。我只想将该实体映射为存储过程,而不是数据库的表。存储过程将返回与实体相同的列。如果不映射到表,这是怎么可能的?这里是一个完整的演练

这是不可能的,因为ObjectSet是IQueryable,而将ObjectSet映射到存储过程不会给您一个IQueryable,因为存储过程本身就无法组合。最好是将存储过程中的内容放入视图中,并将视图映射到可能的对象集。

您需要创建复杂类型,而不是实体。打开模型浏览器,将存储过程作为函数导入。导入SP时不能使用Telletables,但可以使用@tableVariables;在函数导入向导中,您将看到“创建复杂类型”按钮

SP成为模型上下文中的一个方法,您可以使用它来获取IEnumerable[TheComplexType]


在EF4.1代码中,首先更简单的是,在任何类的顶部放置一个[ComplexType]属性,可以将该类型用作context.ExecuteStoreQuery[T]的返回类型。如果您的属性的名称与返回的列的名称完全相同,并且类型排列整齐,那么映射是神奇的——它可以正常工作。

我只想将实体与存储过程绑定,而不是与数据库表绑定。虽然你建议的散步没有这样说。如果你只想通过store proc检索实体:使用linq to sql是可能的,那么为什么实体框架不可能呢?我已经用Linq做了很多次了。我要说的是,我不希望实体与表绑定。我希望使用此实体作为存储过程select语句(如select productid、productname from product)的结果,并且将有一个prouct类具有这些PROEPERITES。但我不想将产品绑定到产品表,我只想用存储过程绑定它。好的,请放心,它不受支持。关于这一问题,国内一直在进行辩论,但我不确定在不久的将来这一点是否会得到支持。