У меня есть несколько таблиц, с которыми я имею дело относительно приложения "Цели" (скриншот ниже). Я использую MVC 3, бритву и linq.
Я использую модель goalModel для извлечения моих данных:
public goals GetGoal(int id)
{
return qDB.goals.Single(g => g.goalID == id);
}
Мне бы тоже хотелось, чтобы Мероприятия были доступны ... где я мог бы сделать что-то вроде:
public goals GetGoalActivities(int id)
{
return qDB.ilpActivities.Where(g => g.goalID == id);
}
Однако это возвращает ошибку. Смарт-теги не отображают столбцы, доступные для ilpActivities. Я видел несколько способов написания кода в контроллере, где это запрос linq - но я бы очень хотел использовать формат выше, если это возможно для согласованности.
Вот ссылка, по которой я пытался перейти, которая может делать то, что я хочу. Имейте в виду, однако, что в конечном итоге я буду редактировать существующие действия, создавать новые и удалять действия. Ссылка: http://geekswithblogs.net/michelotti/archive/2007/12/30/118076.aspx
[Изменить]
Я не могу опубликовать изображение в качестве нового пользователя. Мои таблицы состоят из goalID в качестве основного ключа целей и внешнего ключа в ilpActivities. У ilpActivities есть первичный ключ actionID.
[Update]
Мои таблицы выглядят примерно так (упрощенно, чтобы включить соответствующие поля):
цели: идентификатор цели, имя-цели, цель-цели
ilpActivities: ActivityID, targetID, ActivityName
У меня есть файл dbml: employeeDataClasses.dbml, который был сгенерирован для меня после перетаскивания таблиц в режиме разработки. Это признало ilpActivities как дитя целей
У меня есть файл goalModel.cs:
namespace ILP.Models
{
public class goalsModel
{
#region services
public interface IGoalsService
{
List<goals> GetAllGoals(string oprID);
bool CreateGoal(goals poll);
List<ilpGoalStatus> GetStatuses();
goals GetGoal(int id);
bool EditGoal(goals poll);
List<ilpActivity> GetGoalActivities(goals goal);
}
public class AssetService : IGoalsService
{
private goalsDataClassesDataContext qDB;
public AssetService()
{
qDB = new goalsDataClassesDataContext();
}
#region IGoalsService Members
public List<ilpActivity> GetGoalActivities (goals goal)
{
IEnumerable<ilpActivity> activities = from g in qDB.goals
join a in qDB.ilpActivities on g.goalID equals a.goalID
where a.goalID == goal.goalID
select a;
return activities.ToList();
}
В моем контроллере:
namespace ILP.Controllers
{
public class HomeController : Controller
{
private goalsModel.IGoalsService qService;
public HomeController()
{
qService = new goalsModel.AssetService();
}
[Authorize]
public ActionResult _CreateActivity(int goalID)
{
//var status = qService.GetStatuses();
ViewBag.Status = new SelectList(qService.GetStatuses().ToList(), "goalStatusID", "goalStatus");
// not sure what to do here to get activity model in....
return PartialView();
}
В моем частичном обзоре действий по созданию я получаю доступ только к модели целей:
@model ILP.Models.goals
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Create an Activity</legend>
<div class="editor-label">
@Html.LabelFor(model => model.goalName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.goalName)
@Html.ValidationMessageFor(model => model.goalName)
</div>
.... etc....
На мой взгляд, мне нужно получить доступ к ActivityName of ilpActivities - но единственные варианты исходят из таблицы целей.