簡體   English   中英

實體框架建議無效的字段名稱

[英]Entity Framework suggest invalid field name

我的DataBase中有兩個表, BUNTS ,其中包含有關鋼件的信息

CREATE TABLE BUNTS (
    BUNTCODE         INTEGER NOT NULL,
    BUNTNAME         VARCHAR(20),
    BUNTSTEEL        INTEGER,
    ......
);

POLL_WEIGHT_BUNTS ,其中包含有關每個POLL_WEIGHT_BUNTS上執行的操作的信息

CREATE TABLE POLL_WEIGHT_BUNTS (
    PWBCODE            INTEGER NOT NULL,
    PWBBUNTCODE        INTEGER,
    PWBDEPARTMENTFROM  INTEGER,
    PWBDEPARTMENTTO    INTEGER
    ....
);

這種關系是一對多的。 我將這些表映射到模型。 一切都很好。 最近我決定在表BUNTS中添加一個字段,該字段將引用在bunt上執行的最后一個操作:

BUNTLASTOPER     INTEGER

現在我的模型看起來像這樣:

[Table("BUNTS")]
public class Bunt
{
    [Key]
    [Column("BUNTCODE")]
    public int? Code { set; get; }
    [Column("BUNTNAME")]
    public string Name { set; get; }
    [Column("BUNTSTEEL")]
    public int? SteelCode { set; get; }
    [Column("BUNTLASTOPER")]
    public int? LastOperationID { set; get; }
    [ForeignKey("LastOperationID")]
    public BuntOperation LastOperation { set; get; }
    public virtual ICollection<BuntOperation> Operations { set; get; }
}

[Table("POLL_WEIGHT_BUNTS")]
public class BuntOperation
{
    [Key]
    [Column("PWBCODE")]
    public int? Code { set; get; }
    [Column("PWBBUNTCODE")]
    public int? BuntCode { set; get; }
    [ForeignKey("BuntCode")]
    public Bunt Bunt { set; get; }
    [Column("PWBDEPARTMENTFROM")]
    public int? DepartmentFromCode { set; get; }
    .....
}

在我做完之后,當我嘗試查詢這樣的操作時

return _context.Operations;

它生成一個帶有新的錯誤字段Bunt_Code的SQL語句

SELECT 
"B"."PWBCODE" AS "PWBCODE", 
"B"."PWBBUNTCODE" AS "PWBBUNTCODE", 
"B"."PWBDEPARTMENTFROM" AS "PWBDEPARTMENTFROM", 
....
"B"."Bunt_Code" AS "Bunt_Code"
FROM   "POLL_WEIGHT_BUNTS" AS "B"

我假設現在EF查找的字段是BUNTS表的外鍵,並且無法找到它。 所以它會生成Bunt_Code字段,這在我的數據庫中是丟失的。 但是我已經在BuntOperation類中有一個屬性Bunt ,它引用了BUNTS表。 我錯過了什么?


更新似乎這解決了我的問題

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Bunt>().HasOptional(b => b.LastOperation).WithMany();
    modelBuilder.Entity<Bunt>().HasMany(b => b.Operations).WithRequired(op => op.Bunt);
}

好像這解決了我的問題

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
     modelBuilder.Entity<Bunt>().HasOptional(b => b.LastOperation).WithMany();
     modelBuilder.Entity<Bunt>().HasMany(b => b.Operations).WithRequired(op => op.Bunt);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM