C# Asp.net Mvc模型类作为继承的实体类
我扩展了一个实体框架类(SQL server表),并向子类添加了一些额外的属性,但当我想插入到已扩展的表中时,会出现以下异常: 找不到EntityType“Student.Models.Add.SubjectToStageModel”的映射和元数据信息 我的控制器:C# Asp.net Mvc模型类作为继承的实体类,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我扩展了一个实体框架类(SQL server表),并向子类添加了一些额外的属性,但当我想插入到已扩展的表中时,会出现以下异常: 找不到EntityType“Student.Models.Add.SubjectToStageModel”的映射和元数据信息 我的控制器: [HttpPost] public ActionResult SubjectToStage(SubjectToStageModel model) { try { if (ModelState.IsVa
[HttpPost]
public ActionResult SubjectToStage(SubjectToStageModel model)
{
try
{
if (ModelState.IsValid)
{
using (StudentEntities studentEntities = new StudentEntities())
{
int intCount =
studentEntities.SubjectToStageTbls.Count(
x => x.StageId == model.StageId && x.SubjectId == model.SubjectId);
if (intCount == 0)
{
studentEntities.SubjectToStageTbls.Add(model);
studentEntities.SaveChanges();
}
}
}
}
catch (Exception exception)
{
Debug.WriteLine(exception.ToString());
TempData["error"] = "An error occured";
}
return RedirectToAction("SubjectToStage");
}
我的基类:
public partial class SubjectToStageTbl
{
public SubjectToStageTbl()
{
this.StudentMarkTbls = new HashSet<StudentMarkTbl>();
}
public int SubjectToStageId { get; set; }
public int SubjectId { get; set; }
public int StageId { get; set; }
public int Point { get; set; }
public virtual StageTbl StageTbl { get; set; }
public virtual ICollection<StudentMarkTbl> StudentMarkTbls { get; set; }
public virtual SubjectTbl SubjectTbl { get; set; }
}
public分部类SubjectToStageTbl
{
公共主体标记bl()
{
this.StudentMarkTbls=new HashSet();
}
公共int SubjectToStageId{get;set;}
public int SubjectId{get;set;}
公共int StageId{get;set;}
公共int点{get;set;}
公共虚拟StageTbl StageTbl{get;set;}
公共虚拟ICollection StudentMarkTbls{get;set;}
公共虚拟主题tbl SubjectTbl{get;set;}
}
我的子类:
public class SubjectToStageModel : SubjectToStageTbl
{
public IEnumerable<SelectListItem> StageListItem
{
get
{
List<SelectListItem> listsSelectListItems = new List<SelectListItem>();
try
{
using (StudentEntities studentEntities = new StudentEntities())
{
IQueryable<StageTbl> queryableStage = studentEntities.StageTbls;
foreach (var stage in queryableStage)
{
SelectListItem selectListItem = new SelectListItem();
selectListItem.Value = stage.StageId.ToString();
selectListItem.Text = stage.StageName;
listsSelectListItems.Add(selectListItem);
}
}
}
catch (Exception exception)
{
Debug.WriteLine(exception.ToString());
}
return listsSelectListItems;
}
}
public IEnumerable<SelectListItem> SubjectListItem
{
get
{
List<SelectListItem> listsSelectListItems = new List<SelectListItem>();
try
{
using (StudentEntities studentEntities = new StudentEntities())
{
IQueryable<SubjectTbl> queryableSubject = studentEntities.SubjectTbls;
foreach (var stage in queryableSubject)
{
SelectListItem selectListItem = new SelectListItem();
selectListItem.Value = stage.SubjectId.ToString();
selectListItem.Text = stage.SubjectName;
listsSelectListItems.Add(selectListItem);
}
}
}
catch (Exception exception)
{
Debug.WriteLine(exception.ToString());
}
return listsSelectListItems;
}
}
}
公共类SubjectToStageModel:subjectToStageBl
{
公共可数舞台剧
{
得到
{
List ListSelectListItems=新列表();
尝试
{
使用(StudentEntities StudentEntities=新StudentEntities())
{
IQueryable queryableStage=studentEntities.StageTbls;
foreach(queryableStage中的var阶段)
{
SelectListItem SelectListItem=新建SelectListItem();
selectListItem.Value=stage.StageId.ToString();
选择ListItem.Text=stage.StageName;
添加(selectListItem);
}
}
}
捕获(异常)
{
Debug.WriteLine(exception.ToString());
}
返回列表SelectListItems;
}
}
公共IEnumerable SubjectListItem
{
得到
{
List ListSelectListItems=新列表();
尝试
{
使用(StudentEntities StudentEntities=新StudentEntities())
{
IQueryable queryableSubject=studentEntities.SubjectTbls;
foreach(queryableSubject中的var阶段)
{
SelectListItem SelectListItem=新建SelectListItem();
selectListItem.Value=stage.SubjectId.ToString();
选择ListItem.Text=stage.SubjectName;
添加(selectListItem);
}
}
}
捕获(异常)
{
Debug.WriteLine(exception.ToString());
}
返回列表SelectListItems;
}
}
}
您没有显式地将主题映射到tagemodel
类。如果您希望实体框架使用派生类,那么还应该将它们添加到模型中。但我认为你一开始并不打算这么做
实际上,SubjectToStageModel
是一个视图模型。从实体类派生视图模型看起来很方便,但我认为一般来说这不是一个好主意。视图模型应该根据它们所使用的视图(或用例)进行定制。有几个原因:
- 很可能entity类包含的属性比视图中需要的多。在以后的维护中,不断检查您所做的和不需要的总是一件痛苦的事情
- 随着视图的发展,它可能需要与实体不同的结构模型
- 视图可能需要不同的验证
- 视图可能被允许返回一个绝对不应该被存储的状态(您可能需要对输入的数据进行一些后处理),因此最好确保它不可能被存储
- 它在数据层模型和视图之间创建依赖关系
studentEntities.SubjectToStageTbls.Add((SubjectToStageTbl)model);
(但我从未尝试过)。你的问题是什么?陈述一大堆事实,然后期望我们知道你想知道什么不是一个好的提问方式。