在以前版本的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; }
}
}
答案 0 :(得分:1)
您无法实现第二个无参数构造函数User()
,因为自动生成的类中已有一个。
因此,您只有2个选项可以解决此问题:
继承原始班级User
(见下文)。
修改T4-template,以便使用您要添加的额外代码DateCreated = DateTime.Now;
生成无参数构造函数。每次从数据库刷新数据模型时,都会生成额外的代码。
如果您想选择选项1,,请执行以下操作:
public class myUser: User
{
public myUser(): base()
{
DateCreated = DateTime.Now;
}
}
N.B。:您必须使用类型转换才能支持您的班级myUser。