MVC 4 EF5数据库首先在部分类中设置默认值

时间:2012-11-29 00:20:12

标签: asp.net-mvc-4 entity-framework-5 ef-database-first

我是MVC的新手并试图弄清楚如何为部分类设置默认值。我一直在寻找2天,并且无法获得任何工作。 Here是一种假定的解决方案,但它对我不起作用。我还尝试了[DefaultValue(10)]数据注释。

这是从edmx文件

创建的自动生成的分部类
//------------------------------------------------------------------------------
// <auto-generated>
//    This code was generated from a template.
//
//    Manual changes to this file may cause unexpected behavior in your application.
//    Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace OTIS.Models.Admin
{
    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;

    public partial class Company
    {
        public Company()
        {
            this.Facilities = new HashSet<Facility>();
        }

        public int CompanyID { get; set; }

        [Required]
        [Display(Name = "Company Name")]
        public string CompanyName { get; set; }

        public string Address1 { get; set; }
        public string Address2 { get; set; }
        public string City { get; set; }
        public string State { get; set; }
        public string PostalCode { get; set; }
        public decimal ItemMargin { get; set; }
        public decimal ServicesMargin { get; set; }
        public decimal InvoiceTimeIncrement { get; set; }
        public decimal CashDiscountPct { get; set; }
        public decimal BaseServiceHourlyRate { get; set; }
        public decimal HourlyPremiumRush { get; set; }
        public decimal HourlyPremiumLate { get; set; }
        public decimal HourlyPremiumCustomerMaterial { get; set; }
        public int CreatedByID { get; set; }
        public System.DateTime CreatedOn { get; set; }
        public int ModifiedBy { get; set; }
        public System.DateTime ModifiedOn { get; set; }

        public virtual UserProfile UserProfile { get; set; }
        public virtual UserProfile UserProfile1 { get; set; }
        public virtual ICollection<Facility> Facilities { get; set; }
    }
}

这是我创建的用于添加注释的部分类。

namespace OTIS.Models.Admin
{
    [MetadataType(typeof(CompanyMD))]
    public partial class Company
    {

        //public Company()
        //{
        //    //private System.DateTime _currentDateTime = DateTime.Now;
        //    ////Set Default Values
        //    //CreatedByID = (int)Membership.GetUser().ProviderUserKey;
        //    //CreatedOn = _currentDateTime;
        //    //ModifiedBy = (int)Membership.GetUser().ProviderUserKey;
        //    //ModifiedOn = _currentDateTime;
        //}

        public string FullAddress
        {
            get
            {
                return this.City + ", " + this.State + " " + this.PostalCode;
            }
        }

        public class CompanyMD
        {
            private System.DateTime _currentDateTime = DateTime.Now;
            private int _currentUser = (int)Membership.GetUser().ProviderUserKey;


            [Display(Name = "Company ID")]
            public int CompanyID { get; set; }

            [Required]
            [Display(Name = "Company Name")]
            public string CompanyName { get; set; }

            [Display(Name = "Address")]
            public string Address1 { get; set; }

            [Display(Name = "Address 2")]
            public string Address2 { get; set; }

            public string City { get; set; }
            public string State { get; set; }

            [Display(Name = "Zip")]
            public string PostalCode { get; set; }

            [Display(Name = "Address")]
            public string FullAddress { get; set; }

            [Display(Name = "Material Margin")]
            public decimal ItemMargin { get; set; }

            [Display(Name = "Overtime Margin")]
            public decimal ServicesMargin { get; set; }

            [Display(Name = "Invoice Hour Increment")]
            public decimal InvoiceTimeIncrement { get; set; }

            private decimal _cashDiscountPct;

            [Display(Name = "Cash Discount %")]
            [DisplayFormat(DataFormatString = "{0:P2}")]
            public decimal CashDiscountPct
            {
                get { return _cashDiscountPct; }
                set { _cashDiscountPct = value/100; }
            }

            [Display(Name = "Base Hourly Rate ($/Hr)")]
            [DataType(DataType.Currency), DisplayFormat(DataFormatString = "{0:C2}", ApplyFormatInEditMode = true)]
            public decimal BaseServiceHourlyRate { get; set; }

            [Display(Name = "Rush Premium ($/Hr)")]
            [DataType(DataType.Currency), DisplayFormat(DataFormatString = "{0:C2}", ApplyFormatInEditMode = true)]
            public decimal HourlyPremiumRush { get; set; }

            [Display(Name = "Late Premium ($/Hr)")]
            [DataType(DataType.Currency), DisplayFormat(DataFormatString = "{0:C2}", ApplyFormatInEditMode = true)]
            [DefaultValue(75)]
            public decimal HourlyPremiumLate { get; set; }

            [Display(Name = "Cust Material Premium ($/Hr)")]
            [DataType(DataType.Currency), DisplayFormat(DataFormatString = "{0:C2}", ApplyFormatInEditMode = true)]
            public decimal HourlyPremiumCustomerMaterial { get; set; }

            [Display(Name = "Created By")]
            public int CreatedByID { get; set; }
            //{
            //    get { return _currentUser; }
            //    set { _currentUser = value; }
            //}

            [Display(Name = "Created On")]
            [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
            //[DataType(DataType.Date), DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
            public System.DateTime CreatedOn 
            {
                get { return _currentDateTime; }
                set { _currentDateTime = value; }
            }

            [Display(Name = "Modified By")]
            public int ModifiedBy { get; set; }
            //{
            //    get { return _currentUser; }
            //    set { _currentUser = value; }
            //}

            [Display(Name = "Modified On")]
            public System.DateTime ModifiedOn
            {
                get { return _currentDateTime; }
                set { _currentDateTime = value; }
            }

        }

    }
}

然后在我的控制器中,我实例化一个新的类实例来初始化它,但我设置的值没有设置。

//
        // GET: /Company/Create

        public ActionResult Create()
        {
            ViewBag.CreatedByID = new SelectList(db.UserProfiles, "UserId", "UserName");
            ViewBag.ModifiedBy = new SelectList(db.UserProfiles, "UserId", "UserName");
            Company newCompany = new Company();
            return View(newCompany);
        }

2 个答案:

答案 0 :(得分:3)

抱歉,这太晚了,但我自己也解决了类似的问题。

我认为问题在于你如何引用部分类。它应该是没有代码的partial类的空引用。 EF使用此“声明”将您的部分类链接到元数据类。因此,您的元数据类应如下所示:

namespace OTIS.Models.Admin
{
    [MetadataType(typeof(CompanyMD))]
    public partial class Company
    {}  // <-- note the close bracket!

    public class CompanyMD
    {
        private System.DateTime _currentDateTime = DateTime.Now;
        private int _currentUser = (int)Membership.GetUser().ProviderUserKey;

        public string FullAddress
        {
            get
            {
                return this.City + ", " + this.State + " " + this.PostalCode;
            }
        }

        [Display(Name = "Company ID")]
        public int CompanyID { get; set; }
        [Required]
        [Display(Name = "Company Name")]
        public string CompanyName { get; set; }

        // ....etc.... removed for brevity

    } // close metadata class
} // close namespace

希望这有帮助!

答案 1 :(得分:0)

我发现我需要在GetNew()方法中的Repository Class中处理这个问题,该方法将填充该类的新实例的默认值。