我发现您的问题很有趣,并决定自己测试一下。我创建了两个 MVC 项目(但其中一个也可以是类库,不过我很懒)。第一个 MVC 项目成为具有路由和视图的主要项目,第二个项目获得了模型和控制器。它从一开始就很有魅力,这就是我的做法。
我在第二个项目中创建了模型,在我的示例中命名为 Car(名称 UsersContext 保留在默认文件中,因为我想尽可能少地进行更改)。
namespace PartyBiz.Models
{
public class UsersContext : DbContext
{
public UsersContext()
: base("DefaultConnection")
{
}
public DbSet<Car> Cars { get; set; }
}
[Table("Cars")]
public class Car
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int CarId { get; set; }
public string CarName { get; set; }
}
}
然后我构建了项目并创建了一个与 Car 的 EF 连接的控制器(通过右键单击 Controller 文件夹并使用 Entity Framework 选择具有读/写操作和视图的 MVC 控制器)
完成后控制器看起来像这样(已删除许多行以保持示例简短)
namespace PartyBiz.Controllers
{
public class CarController : Controller
{
// UsersContext is a left over from the default MVC project
private UsersContext db = new UsersContext();
public ActionResult Index()
{
return View(db.Cars.ToList());
}
// Many other actions follows here...
}
}
在第二个项目 (PartyBiz) 中创建的视图我通过拖放复制到第一个项目 (d2admin)。然后我从第二个项目中删除了视图,以确保它们没有在那里使用。
我还必须将第一个项目(带有视图)的引用添加到第二个项目(模型和控制器)。之后,运行第一个项目就很好了。
我继续在模型控制器项目中启用迁移,并且没有任何问题地获得了数据库连接。我可以看到控制器设法保存数据,即使它位于不同的项目中。
我希望这可以帮助你在路上......
编辑:在第一个项目(d2admin)的视图中使用以下代码可以正常工作,即使提到的 Car 控制器存在于第二个项目中。此链接在第一个项目中的 home(控制器)/index(视图)中使用。
@Html.ActionLink("Go to the cars", "Index", "Car")
EDIT2:这是 Car 控制器的索引视图。该视图位于 d2admin 中,并且正在引用 PartyBiz 项目中的控制器。
@model IEnumerable<PartyBiz.Models.Car>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.CarName)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.CarName)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.CarId }) |
@Html.ActionLink("Details", "Details", new { id=item.CarId }) |
@Html.ActionLink("Delete", "Delete", new { id=item.CarId })
</td>
</tr>
}
</table>