EntityFramework 4.1 DbContext 选择添加带有附加字符的 CAST 列
Posted
技术标签:
【中文标题】EntityFramework 4.1 DbContext 选择添加带有附加字符的 CAST 列【英文标题】:EntityFramework 4.1 DbContext select adding CAST columns with additional characters 【发布时间】:2013-09-23 14:59:44 【问题描述】:我正在从 dbcontext 执行标准 GetAll():
DbContext.Set<T>()
但是我从 oracle 收到一条奇怪的消息:
"ORA-00904:\"Extent1\".\"Sub_Object_ID\": 无效标识符"
如果我查看生成的 sql(通过查看查询变量),我看到最后添加了一些变量作为 CASTS
"Extent1"."SomeEntity_ID", <-- correct
"Extent1"."SomeEnttiy2_ID", <-- correct
"Extent1"."Sub_Object", <-- correct
CAST( "Extent1"."SomeEntity_ID1" AS number(10,0)) AS "C3", <-- "1" appended
CAST( "Extent1"."SomeEnttiy2_ID1" AS number(10,0)) AS "C4", <-- "1" appended
CAST( "Extent1"."Sub_Object_ID" AS number(10,0)) AS "C5", <-- "_ID" appended
...
FROM "dbo"."MyEntity" "Extent1"
在选择的主要部分中正确识别了所有属性。但是在 CAST 部分,属性名称附加了数字和_ID ..这导致选择失败..
查看我的实体,我有一次指定的属性.. 以这种格式:
public Nullable<decimal> SomeEntity_ID get; set;
演员表是怎么回事?
【问题讨论】:
【参考方案1】:这只是配置外键的问题。我仍然不明白这种默认行为的意图(为每个带有附加“1”的外国添加一组选择列)..
但是声明外键可以解决这个问题。
通过流畅的 API:
modelBuilder.Entity<FirmPerson>()
.HasRequired(f => f.Firm)
.WithMany(p => p.FirmPerson)
.HasForeignKey(f => f.FirmID);
或通过属性:
public int FirmID get; set;
[ForeignKey("FirmID")]
public virtual Firm Foo get; set;
【讨论】:
以上是关于EntityFramework 4.1 DbContext 选择添加带有附加字符的 CAST 列的主要内容,如果未能解决你的问题,请参考以下文章
如何开始使用 EntityFramework 4.1(或当前的 4.3)
如何使用 EntityFramework 4.1 CodeFirst 防止十进制值在保存时被截断为 2 位? [复制]
Entity Framework 4.1 - 非键列之间的关系
Entity Framework 4.1:配置了一对一/零映射的导航属性[重复]
Entity Framework 4.1 Code First - 使用 LinqKit PredicateBuilder 时忽略包含