2009-04-15 94 views
1

最后检出L2E框架并几乎立即遇到问题。
是的,我知道...我应该读一些书。L2Entities,存储过程和映射

现状:

道具实体 - > ID和名称。
实体映射到具有id和name列的表。
sproc,它只返回id列。

问题:

ObjectResult<MyProp> result = _container.MyStoredProcedure(uberParameter); 

调用此会导致错误

[有罪方法进入这里]抛出异常: System.Data.EntityCommandExecutionException:数据读取器是与指定的不相容' DataBase.MyPropTableObject”。的类型,“姓名”中的一员,不具有所述数据读取器对应的列具有相同名称..

问题#2:

`吨“只返回”这一领域,导致该列有XML数据类型,但sproc使用花哨的select语句,原因如下:

Msg 421,Level 16,State 1,Line 1 xml数据类型不能被选为DISTINCT,因为它不具有可比性。

问:
是否有可能完全关闭映射这个实体道具只为这一个存储过程?

回答

1

问题1是由于proc没有填充实体的列。你并不真的需要PROC如果映射表,只需使用LINQ

var result = MyEntities.EntityIMapped.First(r => r.id = uberParameter).Name; 

会给你从表中的给定id名称列中的值来选择你想它的领域。你不需要使用存储过程。

问题2听起来像是在proc中,我认为不同的xml数据列会给出很多结果,但我只是猜测,因为我不知道你的解决方案。

这不是你的问题的直接答案,但希望它会指出你在正确的方向。

+0

Sproc不应该被触摸。它具有排名,分页等全文搜索功能。这就是为什么它无法处理XML数据类型的列。 这个问题花了我一段时间,但我管理它。我必须创建带有排除的prop和冗余视图的冗余实体(至少在l2e conf xml中 - 它可以在数据库中被忽略)。 阅读某处 - 它在下一次更新中不会成为问题。 – 2009-04-29 08:06:06