如果表的列名与表名相同,则 EDMX 生成器会在列名后加上“1”。例如:在下面的示例中将 Test 更改为 Test1。
SQL Server 表定义:
CREATE TABLE [dbo].[Test]( [Test] nchar NOT NULL, [ColumnsTwo] nchar NULL,
创建的 EF 模型:
<EntitySetMapping Name="Test">
<EntityTypeMapping TypeName="AdventureWorksModel.Test">
<MappingFragment StoreEntitySet="Test">
<ScalarProperty Name="ColumnsTwo" ColumnName="ColumnsTwo" />
<ScalarProperty Name="Test1" ColumnName="Test" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
</EntityContainerMapping>
这会导致 SqlQueries 抛出错误“数据读取器与指定的‘AdventureWorksModel.Test’不兼容。类型的成员‘Test1’在数据读取器中没有同名的对应列。”
为什么 DbContext 生成器会修改列名?ObjectContext 生成器不理会它们。
我们如何解决这个问题?我们无法控制数据库模式。