mad*_*ora 8 asp.net-mvc entity-framework viewmodel asp.net-mvc-scaffolding
我正在尝试一个简单的应用程序.我有三个通过Entity Framework引入的SQL表,并自动创建了模型.我希望能够在Visual Studio中自动构建创建/详细信息/编辑等视图.当我从单个模型(如单独的名称)进行脚手架时,我可以自动执行此操作,但在使用视图模型作为源时无法获得任何结果.
这是我的模特
名称
public partial class Name
{
public Name()
{
this.Addresses = new HashSet<Address>();
this.Emails = new HashSet<Email>();
}
public int ID { get; set; }
public string FIRST_NAME { get; set; }
public string LAST_NAME { get; set; }
public virtual ICollection<Address> Addresses { get; set; }
public virtual ICollection<Email> Emails { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
地址
public partial class Address
{
public int ADDRESS_ID { get; set; }
public int NameID { get; set; }
public string ADDRESS_1 { get; set; }
public string CITY { get; set; }
public string STATE { get; set; }
public string ZIP { get; set; }
public virtual Name Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
电子邮件
public partial class Email
{
public int EMAIL_ID { get; set; }
public int NameID { get; set; }
public string EMAIL { get; set; }
public virtual Name Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和我创建的三种视图模型
public class MainVM
{
public Name Name { get; set; }
public Address Address { get; set; }
public Email Email { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我可以通过创建控制器的步骤 - 右键单击控制器>>添加>>控制器>>带视图的MVC 5控制器,使用实体框架.
接下来我进入这个屏幕.

如果我单击添加,我将收到以下错误.

我在其他答案中读到,如果您使用的是View Model,则需要清除Data上下文类(来自第一个图像),但如果我这样做,Add按钮将被取消激活.我不能超越那个.这里有什么想法?
我打赌原来的海报可能还没有找到答案.但它可以帮助像我这样的寻求者..
发现这篇文章有所帮助.链接
似乎在采用路径控制器 - >添加 - >新脚手架项 - > MVC控制器与视图时,使用实体框架 不适用于视图模型.
如果在选择viewmodel时没有在上面提到的脚手架过程中提供DataContext类,MVC脚手架将不允许您继续进行.如您所示,"添加"按钮被禁用.
解决方法是采取两步的方法.
首先使用scaffolding创建控制器操作(控制器 - >添加 - >新的脚手架项 - >带读/写操作的MVC控制器)
然后通过右键单击各个控制器操作方法然后利用脚手架来添加视图.(控制器的操作方法 - >右键单击 - >添加视图 - >模板 - > [选择任何除空(无模型)] - >模型类 - > [在此处选择视图模型] - >将数据上下文类保留为空 - >添加按钮现在将启用).
链接的文章详细介绍了步骤,请看一下.
但是,您仍然需要自己添加代码以使用控制器操作方法中的Entity框架来使用数据库.(或者您可以选择介绍Busines图层,存储库等.YMMV)但这有助于避免编写大量代码来创建视图.
PS:我发现使用ASP.Net核心1.1时这种方法对我来说很合适
我尝试在控制器中使用视图模型并得到相同的错误。然后,我添加了一个 ID 键来解决该错误,并且 EF 在我的数据库中创建了一个表示视图模型的表。由此我得出的结论是,视图模型不了解有关数据库的任何信息,仅用于在视图中呈现。在控制器中,我处理不同实体的数据库操作。
我必须手动创建一个视图,并在视图中使用 @model myproject.ViewModels.MyViewModel 来表示 Html 助手的视图模型。
这个过程对我有用,我能够将信息保存到每个实体模型的正确数据库表中。
以下代码是一个示例。您可以使用映射工具而不是手动键入代码。使用实体框架将视图模型分解为实体以进行保存。
public ActionResult EmployeeDepartment(EmployeeViewModel evm)
{
if(ModelState.IsValid)
{
try
{
Department dept = new Department();
dept.DepartmentName = evm.DepartmentName;
dept.DepartmentNumber = evm.DepartmentNumber;
db.Departments.Add(dept);
db.SaveChanges();
Employee emp = new Employee();
emp.FirstName = evm.FirstName;
emp.LastName = evm.LastName;
emp.Department = dept;
db.Employees.Add(emp);
db.SaveChanges();
return RedirectToAction("Index");
}
catch(Exception ex)
{
//write code for exception
}
}
return View();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8952 次 |
| 最近记录: |