如何在asp.net mvc中向现有类或对象添加新类型

时间:2017-01-29 08:31:52

标签: c# asp.net-mvc

我想在Microsoft MVC中从数据库表(带有实体框架类)获取的现有类(对象?)中添加一个新类型。 即: 我的人类{f_name,l_name} 当我循环抛出它时,如何向这个对象添加新类型? 像:

// Person class stracture is:
public Person()
{
    public string f_name { get; set; }
    public string l_name { get; set; }
}

我想添加' age'没有将其添加到模型

var all_persons = db.Person.toList();
for (var item in all_person)
{
    item.age = some_value;
}
return View(all_persons);

3 个答案:

答案 0 :(得分:2)

[NotMapped]类中添加Person(假设您不希望此属性映射到数据库):

[NotMapped]
public int Age {get; set;}

或创建视图模型而不是直接使用EF模型

答案 1 :(得分:1)

您可以在linq Select中添加新属性,如下所示:

    void AddNewField(int number)
    {
        var all_persons = new db.Person.Select(x => new { x.f_name, x.l_name, age = number });
        return View(all_persons);
    }

这将节省您必须将新字段添加到模型中。

答案 2 :(得分:1)

使用实体框架的示例:

如果您使用的是代码优先方法,那么[NotMapped]将适合您。

但是如果你使用模型优先方法那么它将无法工作,因为如果你要更新你的模型,它将根据模型的.tt模板进行更新,并创建一个只包含表中属性的类。

那么,现在呢?这里有部分类的概念。

从EF生成的模型:

namespace EF.Model
{
   public partial class Person
   {
       public string f_name { get; set; }
       public string l_name { get; set; }
   }
}

因此,要添加其他属性,您不希望EF在CRUD操作时进行映射。在同一项目中添加一个新的部分类,其具有与EF模型相同的类名和相同的命名空间

namespace EF.Model
{
       public partial class Person
       {
           public string fullName { get; set; }
           public int age { get; set; }
       }
}

所以现在你可以这样做。

var all_persons = db.Person.toList();
for (var item in all_person)
{
    item.age = some_value;
    item.fullName = item.f_name + item.l_name;
}
return View(all_persons);

我希望这能让你更好地理解。你应该阅读有关部分类的内容。 https://www.dotnetperls.com/partial