实体框架映射到用于读取的视图和用于CUD的表

本文关键字:用于 视图 CUD 的表 读取 框架 映射 实体 | 更新日期: 2023-09-27 18:05:01

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

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

我首先使用Code,所以我只是简单地介绍IDbSet<Debt>并使用它。

之后,我想增加一些安全读在DB级别:我创建了一个名为Debt_Read:

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

让我们保持视图体简单,在实际生活中,这段代码使用一些sql函数从会话中检索用户id。

我不想EF映射我的DbSet<Debt>从视图读取和写入更新和创建到表。

我怎样才能做到这一点?

实体框架映射到用于读取的视图和用于CUD的表

您可以使用Dapper。
Dapper是一个由Stack Overflow创建的micro-ORM。您可以使用EF来CUD,使用Dapper来Read。

使用Dapper,您可以构建您的查询。
在这种情况下,您可以使用视图(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

希望这是有用的!