【问题标题】:Always exclude property from Entity Framework 4 Query始终从 Entity Framework 4 查询中排除属性
【发布时间】:2010-06-30 00:30:20
【问题描述】:

我有一个用户实体,它具有以下属性,映射到数据库中的一个字段:

Id         int  
Username   varchar(25)  
Password   binary(64)   
Salt       binary(64)   
Name       varchar(50)  
Locked     bit  

我不想做的是总是为 每个 查询返回密码和盐。但对于某些查询,我确实希望能够检查密码 (from u in db.Users where u.Password == password select u) 或设置密码/盐字段。我不希望 128B 总是在不需要时通过电线。

我尝试将属性的 getter 设置为私有,但这阻止了我在 LINQ 中使用它。基本上,如果我可以将属性设置为总是延迟加载,那就太棒了。

【问题讨论】:

    标签: c# linq entity-framework-4


    【解决方案1】:

    创建一个用户存储库,它使用 POCO 来存储没有密码和盐字段的用户。

    存储库处理调用实体框架并使用其数据填充您的 POCO。

    namespace MyCompany.Data.Repositories
    {
        public class User
        {
            public int Id { get; set; }
            public string Username { get; set; }
            public string Name { get; set; }
            public bool Locked { get; private set; }
        }
    
        public class UserRepository
        {
            public User GetAll() { }
            public User GetById() { }
    
            // Add your check password method here
        }
    }
    

    【讨论】:

    • 那么自动生成的 User 类会发生什么?
    • @TheCloudlessSky - 你在你的 Repository 类中使​​用它(并限制它在其他地方的使用)。
    • 问题就变成了我有两个用户类(尽管来自不同的命名空间)。这不麻烦吗?
    • @TheCloudlessSky - 使用存储库时,消费者根本不需要访问 EF 生成的类。因此,他们应该只看到您的 MyCompany.Data.Repositories.User 类。
    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 2020-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多