让我们假设我有一个名为 Debt 的实体:

public class Debt
{
    [Key]
    public int Id { get; set; }
    public int Amount { get; set; }
    public int UserId { get; set; }
}

我是先用Code,所以简单介绍一下IDbSet<Debt>就可以使用了。

之后,我想为数据库级别的读取添加一些安全性:
我创建了一个名为 Debt_Read 的 View :

CREATE VIEW Debt_Read AS SELECT * FROM Debt WHERE UserId IN (1,2,3)

让我们保持 View 主体简单,在现实生活中,此代码使用一些 sql 函数从 session 中检索用户 ID。

我不想 EF 将我的 DbSet<Debt> 映射到从 VIEW 读取并将更新和创建写入 TABLE。

我怎样才能做到这一点?

最佳答案

您可以使用 Dapper。
Dapper 是 Stack Overflow 创建的微型 ORM。
您可以使用 EF 到 CUD 和 Dapper 来阅读。
使用 Dapper,您可以构建您的查询。
在这种情况下,您能否使用 View (Debt_Read) 构建选择查询。

一个简单的例子:

public Debt FindAll()
{
   var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["BD"].ConnectionString);

   using (IDbConnection db = conn)
   {
      return db.Query<Debt>("Select * From Debt_Read");
   }
}

如果您有兴趣阅读这篇文章,Julia Lerman 撰写了有关使用 ef 和 dapper 的应用程序的文章。

https://msdn.microsoft.com/en-us/magazine/mt703432

希望有用!

关于c# - Entity Framework 映射以查看读取并映射到表以获取 CUD,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31655981/

10-11 00:40