试图创造一个泛型类是能够降低我的C#代码冗余,我有4类,或多或少用同样的方法(添加,获取,编辑,删除)。然而,当我通过实体框架,我查询我的分贝收到此错误。 “不能从‘T’到‘SneakerDrop.Domain.Models.User’用vert和‘T’不包含用户ID的属性
我已经转换类出的静电,能在程序中创建一个新的实例,以测试是否是因为我想通过的xUnit通过一项新的数据类型。
public class Program
{
public User user = new User
{
UserId = 1,
Username = "ian2519",
Password = "Password",
Firstname = "Ian",
Lastname = "Nai",
Email = "[email protected]"
};
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
UserHelper<User> test = new UserHelper<User>();
Program program = new Program();
test.AddUser(program.user);
}
public class UserHelper<T>
{
private SneakerDropDbContext _db = new SneakerDropDbContext();
public bool AddUser(T user)
{
_db.Users.Add(user);
return _db.SaveChanges() == 1;
}
public T GetUserInfoById(T user)
{
T dbInfo = _db.Users.Where(u => u.UserId == user.UserId).FirstOrDefault();
return dbInfo;
}
public bool EditUserInfoById(T user)
{
var results = _db.Users.Where(u => u.UserId == user.UserId).FirstOrDefault();
results.Username = user.Username;
results.Firstname = user.Firstname;
results.Lastname = user.Lastname;
results.Password = user.Password;
results.Email = user.Email;
_db.SaveChanges();
return true;
}
}
收到错误T不能在T转换上_db.USers.Add(用户)并获得T不包含用户名,名字,等..定义上线results.Username,results.Firstname ...
这个类提供的是一般的小目的,将需要限制的东西。
如果你可以把通用的,你需要约束它User
(因为你没有表现出接口或子类),这将使任何通用的管道冗余。如果你觉得你需要在这种情况下,辅助类,只需使用标准类型。
public class UserHelper
{
public bool AddUser(User user)
{
_db.Users.Add(user);
return _db.SaveChanges() == 1;
}
public User GetUserInfoById(User user)
{
User dbInfo = _db.Users.Where(u => u.UserId == user.UserId).FirstOrDefault();
return dbInfo;
}
public bool EditUserInfoById(User user)
{
var results = _db.Users.Where(u => u.UserId == user.UserId).FirstOrDefault();
results.Username = user.Username;
results.Firstname = user.Firstname;
results.Lastname = user.Lastname;
results.Password = user.Password;
results.Email = user.Email;
_db.SaveChanges();
return true;
}
}
用法
UserHelper test = new UserHelper();
test.AddUser(program.user);
什么好像你正在试图做的是要在EF,这只是躲藏有用的方法背后的抽象层,复杂写得很好的框架,使开发更成问题的通用存储库。除非你有一个非常具体的需要我会建议反对强烈。