我已经查看了很多关于 SO 的其他问题,但无法得到答案。我在表格中有一个名为:Sex - Male
我想了解命名它的人,因为它给我带来了 EF 的问题。如果我使用这个:
[Column("Sex - Male")]
public bool Sex { get;set; }
这给了我与模型不兼容的错误,因为找不到“Sex”字段。所以我改成这样:
[Column("[Sex - Male]")]
public bool Sex { get;set; }
然后我收到消息 Invalid Column Name [Sex - Male]。EF是否以某种方式重命名带有空格的列,因为该字段确实存在并且不是任何类型的FK?
编辑
我发现在模型构建器中这样做:
modelBuilder.Entity<Student>().Property(x => x.Sex).HasColumnName("Sex - Male");
导致出现相同的错误,说它不兼容,因为没有同名的名为 Sex 的列!我注意到它发生在我使用 Column 数据注释的任何东西上,而不仅仅是这个字段!
编辑 2
我创建了一个新应用程序并使用模型设计器来查看它如何解释该列并在设计器中将其显示为“Sex___Male”,但是,即使在它周围有 [] 的情况下,将类更改为这个仍然让我找不到列性别男??
编辑 3
看来错误并不是我想的那样,我发现当我只使用 db.Students 时映射配置工作正常;并且该列按预期存在。原来出错的地方是这条线:
var students = (db as IObjectContextAdapter).ObjectContext.ExecuteStoreQuery<Student>(sql);
所以很明显,我猜测的 ExecuteStoreQuery 不会使用相同的映射配置,因此认为该列缺失。不知道为什么将 Column 注释放在类中的属性上不起作用?