MvcScaffolding сохраняет имя элемента DbSet - PullRequest
0 голосов
/ 26 апреля 2011

вот мои классы моделей;

using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

namespace ContactFormWithMultipleCheckboxApp.Models {

    public class Product {

        public int ProductId { get; set; }
        [Required, StringLength(50)]
        public string ProductName { get; set; }
        public string Description { get; set; }

        public virtual ICollection<Message> Messages { get; set; }

    }

    public class Message {

        public int MessageId { get; set; }
        public string From { get; set; }
        [Required]
        //below one is to validate whether the e-mail address is legit or not
        [RegularExpression("\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}\b")]
        public string Email { get; set; }
        [StringLength(100)]
        public string Subject { get; set; }
        public string Content { get; set; }

        public int ProductId { get; set; }
        public Product Product { get; set; }

    }
}

И я установил MvcScaffolding в качестве пакета nuget для своего приложения. Я пытаюсь создать простой лес с помощью следующего кода:

PM> Scaffold Controller Message

это работает и создает мои контроллеры, представления и класс DBContect. но у меня есть одна проблема. почему он преобразует мой элемент dbset в класс dbcontect;

public class ContactFormWithMultipleCheckboxAppContext : DbContext
{
    // You can add custom code to this file. Changes will not be overwritten.
    // 
    // If you want Entity Framework to drop and regenerate your database
    // automatically whenever you change your model schema, add the following
    // code to the Application_Start method in your Global.asax file.
    // Note: this will destroy and re-create your database with every model change.
    // 
    // System.Data.Entity.Database.SetInitializer(new System.Data.Entity.DropCreateDatabaseIfModelChanges<ContactFormWithMultipleCheckboxApp.Models.ContactFormWithMultipleCheckboxAppContext>());

    public DbSet<ContactFormWithMultipleCheckboxApp.Models.Message> Messages { get; set; }
}

как вы можете видеть, он создает имя как Messages, но использует Message в других местах, таких как view и controller.

Что здесь происходит?

1 Ответ

1 голос
/ 26 апреля 2011

В этот блог о MvcScaffolding 0.9.4, Стив Сандерсон пишет:

"На основании ваших отзывов, контроллер имена теперь по умолчанию плюрализуются (например, вы получаете PeopleController скорее чем PersonController для модели введите Person, если вы явно введите PersonController в качестве имя контроллера при строительстве лесов) "

Таким образом, по умолчанию (или условно) это приводит к множественным числам ваших имен, если вы не скажете этого. Вы заявили, что сделали это, и это не плюрализировало ваш контроллер или представления.

Интересно, нужно ли вам также указывать EntityFramework не использовать множественное число? См. Этот пост, "Как использовать единственное число в EntityFramework" для получения более подробной информации об этом.

...