如何更改Entity Framework 6数据库优先生成的类的无参数构造函数?

时间:2014-11-13 17:25:21

标签: entity-framework-6 ef-database-first

在以前版本的EF(4,5)中,我对User课程有以下扩展名:

public partial class User {
    public User()
    {
        DateCreated = DateTime.Now;
    }
}

但是在EF6上,代码生成创建了一个具有已定义的默认无参数构造函数的类,因此我得到以下编译时错误:

  

类型'Core.Models.User'已经定义了一个名为'User'的成员,其参数类型相同

如何使用EF6数据库优先确保构建DateCreated值的初始化? 更一般地说:如何在EF6 *生成的类中创建自定义无参数构造函数?

编辑:以下是自动生成类的简化版本供参考:

//------------------------------------------------------------------------------
// <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 Core.Models
{
    using System;
    using System.Collections.Generic;

    public partial class User
    {
        public User()
        {
            this.Nodes = new HashSet<Node>();
            this.UserOpenIDs = new HashSet<UserOpenID>();
            this.Flags = new HashSet<Flag>();
            this.AwardedMedals = new HashSet<AwardedMedal>();
        }

        public int UserID { get; set; }
        public string Email { get; set; }
        public string DisplayName { get; set; }
        public System.DateTime DateCreated { get; set; }
        public string Location { get; set; }
        public string RealName { get; set; }

        public virtual ICollection<Node> Nodes { get; set; }
        public virtual ICollection<UserOpenID> UserOpenIDs { get; set; }
        public virtual ICollection<Flag> Flags { get; set; }
        public virtual ICollection<AwardedMedal> AwardedMedals { get; set; }
    }
}

1 个答案:

答案 0 :(得分:1)

您无法实现第二个无参数构造函数User(),因为自动生成的类中已有一个。

因此,您只有2个选项可以解决此问题:

  1. 继承原始班级User(见下文)。

  2. 修改T4-template,以便使用您要添加的额外代码DateCreated = DateTime.Now;生成无参数构造函数。每次从数据库刷新数据模型时,都会生成额外的代码。

  3. 如果您想选择选项1,,请执行以下操作:

    public class myUser: User 
    {
        public myUser(): base()
        {
            DateCreated = DateTime.Now;
        }
    }
    

    N.B。:您必须使用类型转换才能支持您的班级myUser。