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

时间:2012-04-23 13:52:21

标签: asp.net asp.net-mvc entity-framework entity-framework-4 edmx

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

因为,首先我尝试将字段添加到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
}

以后,当我更新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:...

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

谢谢!

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

=>

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

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

离)

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

//repository
public IQueryable<WEBORDERLN> WebOrderLns
{
      get { return context.WEBORDERLNs; }
}

现在我在控制器中获取了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

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

再次感谢。

3 个答案:

答案 0 :(得分:14)

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

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

public partial class Weborder
{
  public string newField1 {get; set;} 
  public string newField2 {get; set;} 
}

答案 1 :(得分:6)

不能[NotMapped]工作。

 [NotMapped]
 public string newField1 {get; set;}

答案 2 :(得分:3)

首先,您不应修改数据模型文件。此文件代表您的数据。

其次,您不应该从存储库返回数据模型对象/集合。这是一种非常糟糕的做法,因为您在Controller / View和Model之间创建了一个依赖项。我建议您创建自定义Model对象,其中包含View中所需的属性,将实体映射到这些Model对象,并仅从Repository返回Model对象或Model对象集合。