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



我是MVC的新手,并试图弄清楚如何为分部类设置默认值。我已经搜索了 2 天了,但无法正常工作。这是一个假定的解决方案,但它对我不起作用。我还尝试了 [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);
        }
抱歉,

这太晚了,但我自己刚刚解决了类似的情况。

我认为问题在于你如何引用分部类。它应该是对没有代码的分部类的空引用。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

希望这有帮助!

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

相关内容

  • 没有找到相关文章

最新更新