如何使用具有存储库模式的ASP.NET ObjectDataSource获取特定记录的列表?

时间:2016-02-22 11:14:48

标签: c# asp.net repository-pattern objectdatasource

我是一名新的ASP.NET Webforms开发人员。我现在正在学习如何将ObjectDataSource与Entity Framework和Repository Pattern一起使用。我现在正在努力的是使用带有ObjectDataSource控件的ListView从表格中检索特定的项目列表。

在数据库的Config表中,我有10条记录。我想只检索7条记录。 那我该怎么做?如何将这个ID列表提供给ObjectDataSource以便检索这7条记录而不是所有记录?

ASP.NET代码:

<asp:ListView ID="lvConfigs" runat="server"
                    DataSourceID="odsConfig" DataKeyNames="Id">
                    <ItemTemplate>
                        <div class="col-xs-12 col-sm-6 col-md-3">
                            <div class="thumbnail wow fadeInUp" data-wow-delay=".1s">
                                <img src="../Assets/images/team/member1.png" alt="">
                                <div class="caption">
                                    <h4>
                                        <%#Eval("Value") %>
                                    </h4>
                                    <p>
                                        <%#Eval("Entry") %>
                                    </p>
                                </div>
                            </div>
                        </div>
                    </ItemTemplate>
                    <EmptyDataTemplate>
                        <span>No data was returned.</span>
                    </EmptyDataTemplate>
                </asp:ListView>
                <asp:ObjectDataSource ID="odsConfig" runat="server"
                    TypeName="Test.BLL.ConfigBL"
                    DataObjectTypeName="Test.Models.T_Config"
                    SelectMethod="GetConfigs"></asp:ObjectDataSource>

以下是SysConfigRepository类的代码:

public class SysConfigRepository : IDisposable, ISysConfigRepository
    {
        //internal variable
        private readonly TestEntities dbContext = new DbdKurdoaEntities();

        public IEnumerable<T_SysConfig> GetSysConfigs()
        {
            return dbContext.T_SysConfig.ToList();
        }

        public T_SysConfig GetSysConfig(int id)
        {
            T_SysConfig sysConfigObj = GetSysConfigs().SingleOrDefault(s => s.Id == id);
            return sysConfigObj;
        }

        private bool disposedValue = false;

        protected virtual void Dispose(bool disposing)
        {
            if (!this.disposedValue)
            {
                if (disposing)
                {
                    dbContext.Dispose();
                }
            }
            this.disposedValue = true;
        }

        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }
    }

ISysConfigRepository代码:

public interface ISysConfigRepository : IDisposable
    {
        IEnumerable<T_SysConfig> GetSysConfigs();
        T_SysConfig GetSysConfig(int sysConfigId);
    }

1 个答案:

答案 0 :(得分:0)

我认为应该这样做:

    public List<T_SysConfig> GetSysConfigs(List<int> ids)
    {
        List<T_SysConfig> sysConfigObjs = GetSysConfigs().ToList();
        List<T_SysConfig> result =(from c1 in sysConfigObjs 
                                    join c2 in ids on c1.Id equals c2
                                    select c1).ToList();
        return result;
    }

添加另一种方法以从ID列表中获取配置列表