C# EF-context.Set<;t>;vs context.T
从上个月开始,我就想知道使用context.Set和context.T而不是语法有什么区别 我用这个快速代码来说明这个问题,它试图从EF上下文的用户表信息中获取用户名 context.Set方法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<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();