Mam klasy i do nich interfejsy
[Table("Product")]
public class Product
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ProductId { get; set; }
[Required(ErrorMessage = "Product Name is required.")]
[DisplayName("Product Name")]
[MaxLength(50)]
public string PorductName { get; set; }
public int CategoryId { get; set; }
public virtual Category Category { get; set; }
}
public class EFProductRepository : IProductRepository
{
private EFContext context = new EFContext();
public IEnumerable<Product> GetAllProducts
{
get { return context.Products; }
}
public void ProductCreate(Product p)
{
context.Products.Add(p);
context.SaveChanges();
}
}
oraz
[Table("Category")]
public class Category
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int CategoryId { get; set; }
[Required(ErrorMessage = "Category is required.")]
[DisplayName("Category Description")]
[MaxLength(50)]
public string CategoryDescription { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
public class EFCategoryRepository : ICategoryRepository
{
private EFContext context = new EFContext();
public IEnumerable<Category> Categories
{
get { return context.Categories; }
}
}
Controller
public class ProductController : Controller
{
private IProductRepository repository;
public ProductController(IProductRepository repo)
{
repository = repo;
}
public ActionResult ProductList()
{
ProductListViewModel plvm = new ProductListViewModel
{
Products = repository.GetAllProducts
};
return View(plvm);
}
[HttpGet]
public ActionResult ProductCreate()
{
return View();
}
[HttpPost]
public ActionResult ProductCreate(Product product)
{
if (ModelState.IsValid)
{
TempData["Save"] = "ok";
// return View(product);
}
return View(product);
}
}
Widok
@model WebDev.Models.Product
(...)
@using (Html.BeginForm("ProductCreate", "Product", FormMethod.Post))
{
<p>
@Html.LabelFor(model => model.PorductName)
@Html.TextBoxFor(model => model.PorductName)
@Html.ValidationMessageFor(model => model.PorductName)
</p>
<p>
@Html.LabelFor(model => model.Category.CategoryDescription)
@Html.DropDownListFor(model => model.CategoryId, new SelectList(@Model.Category, "CategoryId", "CategoryDescription"), "Choose Category", null)
</p>
<input type="submit" value="Save" />
}
Jak zgodnie ze sztuką wzorca projektowego wyświetlić wszystkie kategorie z encji "Categories" w kontrolce widoku DropDownListFor aby potem móc utworzyć w tabeli nowy rekord. Używając wyłącznie modeli widoku, bez ViewBagów itp.
Czy w takim przypadku w projekcie należy mieć osobny moduł, który zawiera klasy odwzorowujące tabele i klasę DbContext i czy można go nazywać DAL?
- owszem, można tak zrobić.