在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; }
}
}
您不能实现第二个无参数构造函数User()
,因为在自动生成的类中已经有了一个。
因此,您只有两个选项来解决此问题:
-
从原始类
User
继承(请参见下文)。 -
修改T4模板,以便生成带有要添加的额外代码
DateCreated = DateTime.Now;
的无参数构造函数。这将在每次从数据库刷新数据模型时生成额外的代码。
如果您想选择选项1,请按如下所示执行:
public class myUser: User
{
public myUser(): base()
{
DateCreated = DateTime.Now;
}
}
注意:您必须使用类型强制转换才能支持您的类myUser。