我正在使用EF6。我在EF模型中创建了一个实体,它充当一个名为AppUser的超类,包含我想在数据库中生成的所有属性。但是,我创建了另一个名为AppUserM的类,继承自AppUser;子类有一些用于某些UI操作的方法。 请参阅下面的AppUser类:
[Table("appUser")]
public class AppUser
{
public AppUser()
{
this._AccessRights = new HashSet<AccessRight>();
this._ActivityLog = new HashSet<ActivityLog>();
}
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int userId { get; set; }
[MaxLength(50)]
[DisplayName("Username")]
public string username { get; set; }
[DataType(DataType.Password)]
[MaxLength(2000)]
[DisplayName("Password")]
public string password { get; set; }
[MaxLength(4000)]
[DisplayName("FullName")]
public string fullname { get; set; }
public bool isADUser { get; set; }
[ForeignKey("BankBranch")]
public int branchId { get; set; }
[ForeignKey("AppRole")]
public int roleId { get; set; }
public virtual BankBranch BankBranch { get; set; }
public virtual AppRole AppRole { get; set; }
public virtual ICollection<AccessRight> _AccessRights { get; set; }
public virtual ICollection<ActivityLog> _ActivityLog { get; set; }
}
子类如下所示:
public class AppUserM : AppUser
{
public void Add()
{
using (var cntx = new JEntityDbContext())
{
cntx.AppUsers.Add(this);
cntx.SaveChanges();
}
}
public void Read()
{
}
}
执行此操作会在AppUserM的Add()方法中引发异常,完全是在cntx.AppUsers.Add(this),请参阅下面的实现;
AppUserM user = new AppUserM
{
username = "Hakeem",
password = "pass",
roleId = 1,
isADUser = false,
fullname = "Ojulari Hakeem Olusegun"
};
user.Add();
例外是:
其他信息:实体类型AppUserM不是当前上下文模型的一部分。
我不想像这样
在Add()方法中映射类AppUser user = new AppUser {username = this.username};
然后呢
cntx.AppUsers.Add(user);
我希望尽量减少打字时间并确保效率。有没有更好的方法来实现这一目标。感谢您的贡献
答案 0 :(得分:0)
我不希望EF可以处理这个问题,因为EF会为您的实体类创建代理(通过覆盖虚拟导航道具来处理延迟加载等)。
我只是将方法添加到现有的AppUser
类。
[Table("appUser")]
public class AppUser
{
public AppUser()
{
this._AccessRights = new HashSet<AccessRight>();
this._ActivityLog = new HashSet<ActivityLog>();
}
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int userId { get; set; }
// ... other properties
public void Add()
{
using (var cntx = new JEntityDbContext())
{
cntx.AppUsers.Add(this);
cntx.SaveChanges();
}
}
public void Read()
{
}
}