LINQ-to-Entities,两个具有相同列名的视图之间的关联出现歧义列名。

7

这是我第一次使用Entity Framework处理复杂问题,涉及到的是IT技术。

我采用“模型优先”方法,并使用LINQ-to-Entities查询数据源。

我创建了一个实体模型,并将其作为OData服务公开,连接到一个数据库,该数据库的架构不能被我控制。在我的模型中,我有两个基于该数据库中两个视图的实体。 我已经在两个实体之间建立了关联,并且两个视图都有一个同名列。

我遇到了错误:

模糊的列名'columnname'。由于绑定错误无法使用视图或函数'viewname'。

如果我自己编写SQL语句,我会给其中一个列名加上别名来防止出现问题。EF显然没有这样做。 除了更改视图(无法更改),我该怎么解决这个问题? 我认为这与这些实体被映射到视图,而不是映射到实际表有关。


请说明您是使用设计模型还是代码优先。如果您正在使用设计器,则只需将两个视图拖到设计表面并添加关系即可轻松解决此问题。在代码优先中,需要进行更多的工作。 另外,您是通过实体 SQL 进行查询还是使用 LINQ to Entities? - jessehouwing
@jessehouwing:我还没有机会整理这个代码。我希望有人能够偶然发现它,并产生“哦,我以前遇到过这个问题”的反应。我刚刚在问题中添加了一些额外的信息。我正在使用模型优先方法,并且(如标题中所指定的)我正在使用LINQ to Entities。 - dotnetengineer
@dotnetengineer,很抱歉,但我以前没有遇到过这个问题,想想看,我们使用的实体使用具有相同名称的列而没有任何问题。您能否展示视图定义(SQL)?或者至少select [column names here] - jessehouwing
1个回答

1

假设您可以更改模型,您是否尝试进入模型并仅更改其中一个列名称?如果两个视图从同一个表中检索相同的列,则可能会产生问题。我可以告诉您,当直接使用映射到表的模型进行工作时,具有相同名称的列不是问题。即使对同一张表进行多个关联也会被正确处理,导航属性会自动获得唯一的名称。根据您使用的EF版本,您应该能够深入到模型下或t4模板文件下的cs文件中查看情况。然后,您始终可以创建部分类以将其弯曲为所需。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接