c# - Entity Framework 映射到用于读取的 View 和用于 CUD 的表

标签 c# entity-framework ef-code-first ef-fluent-api

假设我有一个名为 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 映射到用于读取的 View 和用于 CUD 的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31655981/

相关文章:

c# - SqlCeCommand.ExecuteScalar 不从表中的第二行返回值

c# - 在 C# 的文件夹中查找最新创建的文件的好方法是什么?

entity-framework - 我应该共享 Entity Framework 上下文还是为每个操作创建一个新上下文?

c# - 有什么好的例子或框架可以教我n层开发吗?

c# - Entity Framework 5 Code First 中的一对一和一对多关系

c# - 如何在 LINQ 查询中指定自定义方法(C# Entity Framework )

entity-framework - 为什么设计者在从数据库更新模型时会创建两个 .Designer.cs 文件?

c# - Entity Framework 不插入/更新某些列(但仍应映射列)

c# - 我在从两个外键引用到两个不同表的复合键中出错

c# - 将参数传递给 Web API 模型联编程序