c# - Entity Framework 建议无效的字段名称

标签 c# .net entity-framework firebird

我的数据库中有两个表,BUNTS,其中包含有关钢材的信息

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

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);
}

关于c# - Entity Framework 建议无效的字段名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30487240/

相关文章:

c# - 将文本(字符串值)附加到 txt 文件的每一行

c# - 对 C# 和 C++ 项目使用相同的 .proto 文件

C# - 在字符串中插入可变数量的空格? (格式化输出文件)

c# - 在 .NET 中使用 NTFS 压缩来压缩文件夹

c# - 如何首先通过EF代码从存储过程中检索输出参数

asp.net - 通过别名从本地 IIS7 连接到 SQL Server 时出错

c# - NHibernate保存非持久实体,同时维护现有ID

c# - 如何读取 BitmapSource 四个角的像素?

.net - 如何在 CLR 存储过程中使用 Entity Framework?

c# - ObjectStateManager 无法使用相同的键跟踪多个对象