不能从一个类的新实例通过一个通用的类型到所述类方法

问题描述 投票:0回答:1

试图创造一个泛型类是能够降低我的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 ...

c# entity-framework unit-testing generics
1个回答
1
投票

这个类提供的是一般的小目的,将需要限制的东西。

如果你可以把通用的,你需要约束它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,这只是躲藏有用的方法背后的抽象层,复杂写得很好的框架,使开发更成问题的通用存储库。除非你有一个非常具体的需要我会建议反对强烈。

© www.soinside.com 2019 - 2024. All rights reserved.