MvcScaffolding保留多个DbSet项目名称

时间:2011-04-26 17:05:06

标签: asp.net-mvc asp.net-mvc-3 scaffolding

这是我的模型类;

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类。但我有一个问题。为什么它在dbcontect类中复制了我的dbset项;

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。

这里发生了什么?

1 个答案:

答案 0 :(得分:1)

this blog post about MvcScaffolding 0.9.4中,史蒂夫桑德森写道:

  

“根据您的反馈,控制器   现在名称默认为复数形式   (例如,你得到的是PeopleController   比PersonController的模型   键入Person,除非您明确说明   输入PersonController作为   脚手架时的控制器名称)“

所以默认情况下(或惯例)它会使你的名字复数化,除非你告诉它不要。你声明你这样做了,并没有使你的控制器或观点多元化。

我想知道你是否还需要告诉EntityFramework不要复数。有关详细信息,请参阅此帖子"How to singularize in EntityFramework"