Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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# 将实体框架调用绑定到一个公共参数,如UserId_C#_.net_Linq_Entity Framework_Entity Framework 6 - Fatal编程技术网

C# 将实体框架调用绑定到一个公共参数,如UserId

C# 将实体框架调用绑定到一个公共参数,如UserId,c#,.net,linq,entity-framework,entity-framework-6,C#,.net,Linq,Entity Framework,Entity Framework 6,我们正在使用实体框架创建一个应用程序,该框架处理特定于单个用户的数据。数据库支持无限用户,因此我们确实需要按用户ID进行筛选。SQL Server后端对所有表都有一个公共列(INT UserId)。对于数据库的每个查询,我们都必须传递和计算一个UserId参数,如LINQ中的参数。有没有一种好方法可以删除此代码,以便所有查询自动传递某个更高级别的UserId集?例如,如果我想从数据库中获取用户ID的GetFoo(),我可以使用应用程序调用context.GetFoo(),而不必将用户ID作为参数

我们正在使用实体框架创建一个应用程序,该框架处理特定于单个用户的数据。数据库支持无限用户,因此我们确实需要按用户ID进行筛选。SQL Server后端对所有表都有一个公共列(INT UserId)。对于数据库的每个查询,我们都必须传递和计算一个UserId参数,如LINQ中的参数。有没有一种好方法可以删除此代码,以便所有查询自动传递某个更高级别的UserId集?例如,如果我想从数据库中获取用户ID的GetFoo(),我可以使用应用程序调用context.GetFoo(),而不必将用户ID作为参数传递?例如,在创建上下文时,我们可以在该级别传递用户ID?

您可以使用以下命令

在DbContext中,可以定义如下静态属性

public static int UserId;
然后定义以下接口

public interface IUser
{
   int UserId {get; set;}
}
然后,您将通过上面的
IUser
界面装饰所有具有
UserId
的实体

DbContext
中,您可以编写以下内容:

public static IQueryable<T> WhereUser<T>(this DbSet<T> query, Expression<Func<T, bool>> predicate) where T : class,IUser
{
    return query.Where(predicate).Where(t => t.UserId == UserId); 
}

希望这将对您有所帮助

您可以使用此库:

只需在需要按用户Id筛选的所有实体上实现一个带有用户Id的接口

public interface IUserEntity
{
  int UserId {get; set;}
}
将用户ID传递到DbContext,然后在OnModelCreating中:

modelBuilder.Filter("UserId", (IUserEntity u) => u.UserId, _userId);

让每个用户在连接字符串中登录到单独的数据库。将数据库结构为系统表,以便多个数据库(用户)可以访问系统表。如问题中所述,他可以在更高级别上定义用户id,这样您就可以提供解决方案,而无需将id作为参数传递
modelBuilder.Filter("UserId", (IUserEntity u) => u.UserId, _userId);