【问题标题】:EntityFramework 4.1 DbContext select adding CAST columns with additional charactersEntityFramework 4.1 DbContext 选择添加带有附加字符的 CAST 列
【发布时间】: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; }

演员表是怎么回事?

【问题讨论】:

    标签: entity-framework entity-framework-4.1 dbcontext


    【解决方案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; }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      相关资源
      最近更新 更多