Вот моя модель с соответствующими перечислениями ниже, которые я использую с entity framework 5 и asp.net mvc4 codefirst. Я также использую переносимый файл базы данных (.mdf)
public class Project
{
public Project()
{
Images = new List<ProjectImage>();
}
public int ProjectId { get; set; }
[Required]
public string Title { get; set; }
public virtual ICollection<ProjectImage> Images { get; set; }
public string Description { get; set; }
public ProjectType Type { get; set; }
public ProjectState State { get; set; }
}
public enum ProjectType
{
Phone,
Web,
Windows
}
public enum ProjectState : byte
{
InProgress,
NotStarted,
Done
}
После отправки модели из представления все поля правильно сохраняются в базе данных, кроме полей перечисления. Они сохраняются, но сохраняют только первые значения каждого типа перечисления даже после выбора различных значений в представлении.
Я тоже пробовал сохранять правки, и происходит то же самое.
Я прошел через начало моего метода создания сообщения, и все кажется нормальным после вызова savechanges в моем контексте, но когда я перенаправляюсь обратно на страницу индекса, он показывает значения свойств перечисления как начальные в перечислениях (т.е. первые значения перечисления )
Мои методы создания и редактирования приведены ниже. Надеюсь, это не ошибка, но, пожалуйста, помогите, так как я уже пару дней выдергивал волосы из-за этого. Я только начинаю работать с codefirst и перечислениями вместе. Спасибо.
Создать метод публикации
[HttpPost]
public ActionResult Create(Project project, HttpPostedFileBase file)
{
try
{
if (file != null && file.ContentLength > 0 && file.ContentType.Contains("image"))
{
//create a new unique filename with using guid, filename and project title
string relativePath = Constants.PortfolioImagesBaseFolder +
project.Title.Replace(" ", "") +
Guid.NewGuid().ToString() +
Path.GetFileName(file.FileName);
string absolutePath = Server.MapPath(relativePath);
//save the file
file.SaveAs(absolutePath);
if (ModelState.IsValid)
{
project.Images.Add(new ProjectImage()
{
IsProjectMainImage = true,
Url = relativePath,
Title = "Main Project Image"
});
context.Projects.Add(project);
context.SaveChanges();
return RedirectToAction("Index");
}
}
ViewBag.ProjectTypes = CreateSelectListFromEnumType<ProjectType>();
ViewBag.ProjectStates = CreateSelectListFromEnumType<ProjectState>();
return RedirectToAction("Index");
}
Изменить метод публикации
[HttpPost]
public ActionResult Edit(int id, Project project)
{
try
{
if (ModelState.IsValid)
{
//Project projectFromDb = context.Projects.Single(p => p.ProjectId == id);
//projectFromDb.State = project.State;
//projectFromDb.Type = project.Type;
//projectFromDb.Title = project.Title;
//projectFromDb.Description = project.Description;
EntityState entityState = context.Entry(project).State;
context.Entry(project).State = EntityState.Modified;
context.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.ProjectTypes = CreateSelectListFromEnumType<ProjectType>();
ViewBag.ProjectStates = CreateSelectListFromEnumType<ProjectState>();
return View(project);
}
Также, прежде чем пометить как дубликат, я просмотрел множество ответов на stackoverflow, и никто не смог мне помочь, ура, поэтому ожидание в течение двух дней, прежде чем задать вопрос.
1 ответ
В соответствии с вашими комментариями - поскольку вы нацелены на .NET Framework 4, свойства перечисления не были обнаружены и добавлены в модель, поскольку EF 4, который был частью .NET Framework 4, не поддерживал перечисления, и приложение не будет работать на машине, на которой есть только Установлена .NET Framework 4 (а не .NET Framework 4.5, которая является обновлением на месте). По той же причине, по которой EF5, установленный в проекте, ориентированном на .NET Framework 4, не позволяет использовать функции, доступные в EF5 (перечисления, геопространственные типы, TVF и другие), при ориентации на .NET Framework 4.5. Перенацеливание вашего проекта на .NET Framework 4.5 и переустановка EF5 сделает все эти функции доступными.
Похожие вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.