11

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

因为,首先我尝试仅将字段添加到实体类中。

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:...

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

谢谢!

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

=>

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

在将数据从控制器传递到视图之前,我需要将更多数据(字段)添加到 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

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

再次感谢。

4

3 回答 3

14

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

在与自动生成的类相同的程序集和命名空间中创建一个新文件 WebOrderPart.cs,其中包含:

public partial class Weborder
{
  public string newField1 {get; set;} 
  public string newField2 {get; set;} 
}
于 2012-04-23T14:26:49.470 回答
6

[NotMapped] 不起作用。

 [NotMapped]
 public string newField1 {get; set;}
于 2012-04-23T14:25:36.473 回答
3

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

其次,您不应该从您的存储库中返回您的数据模型对象/集合。这是一个非常糟糕的做法,因为您正在创建控制器/视图和模型之间的依赖关系。我建议您创建自定义模型对象,其中包含您在视图中需要的属性,将您的实体映射到这些模型对象,并且只从您的存储库返回模型对象或模型对象的集合。

于 2012-04-23T14:39:21.263 回答