使用 Entity Framework 创建自定义模型,该模型不是数据库中任何 table 的模型
Using Entity Framework to create a custom model that is not a model of any table in a database
我是第一次使用 .NetCore Entity Framework,想知道是否可以生成自定义模型。
设置应用程序时,EF 从数据库创建了所有模型。很好,符合预期。
但是,我现在创建了一个新控制器,其中 returns 数据是复杂 linq 查询的结果。
我所有的其他控制器return一个这样的模型:
return View(characterList);
其中 characterList 是数据库的实际模型 table。
但是我如何创建一个全新的自定义模型,它不代表数据库中的任何 table?
谢谢!
您首先可以简单地创建您想要在代码中拥有的模型。
例如:
Public class NewModel {
Public String Test {get; set;}
}
然后您可以使用您的上下文和 linq/select 的强大功能在您的新模型中进行查询。
像这样:
List<NewModel> list = dbContext.Set<OldModel>().Where(...).Select<NewModel>(x=> new NewModel(){ Test = x.OldTestString }).ToList()
这样你就得到了新模型的列表。你可以例如包括其他表并将它们连接到查询中以使其更复杂。但是这个例子应该给你一个起点。
如果您正在解释的模型应该仅用于视图,请考虑创建一个 ViewModel,它基本上是一个 class,仅包含视图所需的属性,通常没有任何逻辑或仅包含在视图中显示立即需要的逻辑。
例如,您将创建一个新的 class,假设 CharacterVM
public class CharacterVM
{
public string Name{ get; set; }
public string CharacterType {get; set; }
public bool Invincible{ get; set; }
}
在您看来,您将使用 CharacterVM,它具有 CharacterVM 中公开的所有属性 class
@model CharacterVM
最重要的一步是重新映射数据库模型的属性(假设它被称为 Character
),在这种情况下您所要做的就是重新映射 Character
的属性到要传递给视图的 CharacterVM
的新实例的属性。
public IActionResult Index(int idCharacter)
{
var character = db.Characters.SingleOrDefault(c => c.idCharacter == idCharacter);
var characterVM = new CharacterVM()
{
Name = character.Name,
CharacterType = character.Type.Name,
Invincibility = false
};
return View(characterVM);
}
我是第一次使用 .NetCore Entity Framework,想知道是否可以生成自定义模型。
设置应用程序时,EF 从数据库创建了所有模型。很好,符合预期。
但是,我现在创建了一个新控制器,其中 returns 数据是复杂 linq 查询的结果。
我所有的其他控制器return一个这样的模型:
return View(characterList);
其中 characterList 是数据库的实际模型 table。
但是我如何创建一个全新的自定义模型,它不代表数据库中的任何 table?
谢谢!
您首先可以简单地创建您想要在代码中拥有的模型。 例如:
Public class NewModel {
Public String Test {get; set;}
}
然后您可以使用您的上下文和 linq/select 的强大功能在您的新模型中进行查询。 像这样:
List<NewModel> list = dbContext.Set<OldModel>().Where(...).Select<NewModel>(x=> new NewModel(){ Test = x.OldTestString }).ToList()
这样你就得到了新模型的列表。你可以例如包括其他表并将它们连接到查询中以使其更复杂。但是这个例子应该给你一个起点。
如果您正在解释的模型应该仅用于视图,请考虑创建一个 ViewModel,它基本上是一个 class,仅包含视图所需的属性,通常没有任何逻辑或仅包含在视图中显示立即需要的逻辑。
例如,您将创建一个新的 class,假设 CharacterVM
public class CharacterVM
{
public string Name{ get; set; }
public string CharacterType {get; set; }
public bool Invincible{ get; set; }
}
在您看来,您将使用 CharacterVM,它具有 CharacterVM 中公开的所有属性 class
@model CharacterVM
最重要的一步是重新映射数据库模型的属性(假设它被称为 Character
),在这种情况下您所要做的就是重新映射 Character
的属性到要传递给视图的 CharacterVM
的新实例的属性。
public IActionResult Index(int idCharacter)
{
var character = db.Characters.SingleOrDefault(c => c.idCharacter == idCharacter);
var characterVM = new CharacterVM()
{
Name = character.Name,
CharacterType = character.Type.Name,
Invincibility = false
};
return View(characterVM);
}