Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF-context.Set<;t>;vs context.T_C#_Entity Framework - Fatal编程技术网

C# EF-context.Set<;t>;vs context.T

C# EF-context.Set<;t>;vs context.T,c#,entity-framework,C#,Entity Framework,从上个月开始,我就想知道使用context.Set和context.T而不是语法有什么区别 我用这个快速代码来说明这个问题,它试图从EF上下文的用户表信息中获取用户名 context.Set方法 context.Set<User>().Where(u => u.Id = userId).Select(u => u.UserName).Single(); context.Users.Where(u => u.Id = userId).Select(u =>

从上个月开始,我就想知道使用context.Set和context.T而不是语法有什么区别

我用这个快速代码来说明这个问题,它试图从EF上下文的用户表信息中获取用户名

context.Set方法

context.Set<User>().Where(u => u.Id = userId).Select(u => u.UserName).Single();
 context.Users.Where(u => u.Id = userId).Select(u => u.UserName).Single();

谢谢:)

正如鲁福爵士已经指出的,没有区别。 你可以用

context.Users
因为您在上下文类中声明了类型为
DbSet
的属性
Users

公共数据库集用户{get;set;}

在某些情况下,您需要使用
上下文。设置
因为您在编码时不知道
t
的值,它将在运行时设置

例如,在通用存储库中:

    public abstract class Entity
    {
        public int Id { get; set; }
    }

    public class User:Entity
    {

        public string Name { get; set; }
    }


    public class Product:Entity
    {

        public string ProductName { get; set; }
    }

    public class ApplicationDBContext : DbContext
    {
        public DbSet<User> Users { get; set; }
        public DbSet<Product> Products { get; set; }

    }

    public class Repo<T> where T:Entity
    {

      public IList<T> GetList()
        {
            using (var context = new ApplicationDBContext())
            {

                 return context.Set<T>().ToList();
            }
        }

    }

没有区别。顺便说一句,context.T是一个属性而不是一个方法,所以我应该编写我最喜欢的语法?它是preference/code-style/随便什么。没有技术上的区别,因为行为在任何一种情况下都不会改变
context.User
不过是调用
context.DbSet()
稍微方便一点的方法。您决定使用什么取决于您自己的偏好或团队成员的偏好。唯一的区别是在使用属性之前,您必须在您的上下文中声明该属性。非常感谢各位:)可能值得提及该上下文。Set()可以存在,而上下文中没有
DbSet
属性,如果
T1
在模型中配置或被其他实体类型引用。您好,我正在查看几个通用存储库,没有人使用“using”,这真的有必要吗?使用“using”的原因是为了处理对象“DbContext”和免费资源,您可以在本文中找到有关此主题的更多信息
    public abstract class Entity
    {
        public int Id { get; set; }
    }

    public class User:Entity
    {

        public string Name { get; set; }
    }


    public class Product:Entity
    {

        public string ProductName { get; set; }
    }

    public class ApplicationDBContext : DbContext
    {
        public DbSet<User> Users { get; set; }
        public DbSet<Product> Products { get; set; }

    }

    public class Repo<T> where T:Entity
    {

      public IList<T> GetList()
        {
            using (var context = new ApplicationDBContext())
            {

                 return context.Set<T>().ToList();
            }
        }

    }
  var userRepo = new Repo<User>();
  var users = userRepo.GetList();

  var productRepo = new Repo<Product>();
  var products = productRepo.GetList();