我想在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);
答案 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