实体框架4(使用EDMX),如何将一个字段添加到DB实际上没有该字段的模型中

Exp*_* be 11 asp.net asp.net-mvc entity-framework edmx entity-framework-4

我需要在模型中添加一个字段,数据库实际上没有该字段.

因为,首先我尝试将字段添加到Entity类中.

public partial class Weborder
{
  (Auto Generated)
  public int orderno {get; set;}
  .
  .
  .
  (Add Manually)
  public string newField1 {get; set;} //this is new field that DB does not have
  public string newField2 {get; set;} //this is new field that DB does not have
}
Run Code Online (Sandbox Code Playgroud)

然后,当我更新EDXM然后EDMX删除新字段,因为数据库没有该字段.:(

所以我手动将该字段添加到EDMX模型中.(添加 - >标量属性)

然后在编译时发生错误,错误消息说:

Error   1   Error 3004: Problem in mapping fragments starting at line 399:No mapping specified for properties ...
An Entity with Key (PK) will not round-trip when:...
Run Code Online (Sandbox Code Playgroud)

有人知道如何在实体类中添加新字段吗?

谢谢!

编辑:如果您的模型是数据库的表示,并且在数据库中没有该字段,为什么要手动添加它?

=>

检索数据时,对象的返回类型是实体类.

在将数据从控制器传递到视图之前,我需要在IQueryable结果中添加更多数据(字段).

EX)

public DbSet<WEBORDERLN> WEBORDERLNs { get; set; }

//repository
public IQueryable<WEBORDERLN> WebOrderLns
{
      get { return context.WEBORDERLNs; }
}
Run Code Online (Sandbox Code Playgroud)

现在我在控制器中获取weborderln数据.在通过视图之前,我需要

在结果中添加额外的数据.

var data = webOrderLnRepository.WebOrderLns.Where(e => e.PICKNO == OrderNo).ToList();

foreach (WEBORDERLN weborderln in data)
{
   weborderln.[NEW FIELD] = "EXTRA DATA";   //// FOR THIS, I NEED TO ADD NEW FILED INTO ENTITY CLASS
}

//return data
Run Code Online (Sandbox Code Playgroud)

我希望它可以解释这个问题:)

再次感谢.

Lad*_*nka 14

您必须创建实体类的新部分部分(在新的.cs文件中)并向该类添加新字段.您不能修改由自动生成创建的部分零件,因为每次更改EDMX文件时都会覆盖自动生成的文件.您也不能在EDMX中包含该字段,因为EDMX定义了您对数据库的映射=它只包含数据库中的字段.

在与包含以下内容的自动生成的类相同的程序集和命名空间中创建新文件WebOrderPart.cs:

public partial class Weborder
{
  public string newField1 {get; set;} 
  public string newField2 {get; set;} 
}
Run Code Online (Sandbox Code Playgroud)


jrb*_*jrb 6

不能[NotMapped]工作.

 [NotMapped]
 public string newField1 {get; set;}
Run Code Online (Sandbox Code Playgroud)