Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
petapoco查询Sql Server视图_Sql_Dotnetnuke_Petapoco_Dotnetnuke 7 - Fatal编程技术网

petapoco查询Sql Server视图

petapoco查询Sql Server视图,sql,dotnetnuke,petapoco,dotnetnuke-7,Sql,Dotnetnuke,Petapoco,Dotnetnuke 7,我已经开始在dotnetnuke 7中使用DAL2。我在实例使用的SQL server数据库中创建了一些复杂的查询视图。从这些视图访问简单选择的最佳实践是什么 如果我使用以下命令,那么这是否会绕过dbOwner和ObjectQualifier: Public Function GetProducts_Short_Active() As IEnumerable(Of Object) Using ctx As IDataContext = DataContext.Instan

我已经开始在dotnetnuke 7中使用DAL2。我在实例使用的SQL server数据库中创建了一些复杂的查询视图。从这些视图访问简单选择的最佳实践是什么

如果我使用以下命令,那么这是否会绕过dbOwner和ObjectQualifier:

    Public Function GetProducts_Short_Active() As IEnumerable(Of Object)
        Using ctx As IDataContext = DataContext.Instance
            Return ctx.ExecuteQuery(Of Object)(CommandType.Text, "SELECT * FROM dbo.vw_ProductList_Short_Active", Nothing)
        End Using
    End Function
问题: 或者我应该为每个sql server视图定义一个类和属性(就像我为每个表所做的那样),而表名注释是视图的名称,如下所示

<TableName("vw_ProductList_Short_Active")> _
<PrimaryKey("ProductId")> _
<Cacheable("ProductList_Short_Active", CacheItemPriority.Default, 20)> _
<Scope("PortalId")>
Public Class ProductList_Short_Active
     ''view properties go here
End Class
_
_
_
公共类产品列表\u短\u活动
''在这里查看属性
末级
编辑1:
似乎表明我不应该使用视图,而是应该使用iEnumerable的可忽略列来扩展我的产品类,这些列表示我需要的“连接”数据记录。准确吗?

我有几种方法可以做到这一点

如果不需要更新或插入视图的表,我认为使用视图是一种很好的方法。我已经成功地将视图用作DAL2表,但即使它是模式绑定的,也只有GET可以工作。如果您只是在读取数据,那么这是最好的方法

我还通过从呼吸方法连接儿童数据来完成这项工作。 在中(完整的源代码在相关文件部分),我有一个基于带有ignorecolumn属性的表的DAL2对象

[TableName("DNNuclear_DataVisualizer_Chart")]
[PrimaryKey("ChartId", AutoIncrement = true)]
[Cacheable("Charts", CacheItemPriority.Default, 20)]
[Scope("ModuleId")]
public class Chart
{
    ///<summary>
    ///</summary>
    public int ChartId { get; set; }
...
    [IgnoreColumn]
    public IList<SeriesData> SeriesData { get; set; }
...
[表名(“DNNuclear\u数据可视化工具\u图表”)]
[PrimaryKey(“图表ID”,自动递增=真)]
[可缓存(“图表”,CacheItemPriority.Default,20)]
[范围(“模块ID”)]
公共课程表
{
///
///
公共int ChartId{get;set;}
...
[忽略列]
公共IList系列数据{get;set;}
...
}

在DAL2存储库方法中填充该属性

   public Chart GetItem(int itemId)
   {
       Chart t;
       using (IDataContext ctx = DataContext.Instance())
       {
           var rep = ctx.GetRepository<Chart>();
           t = rep.GetById(itemId);
           var repD = ctx.GetRepository<ChartData>();
           var data = repD.Get(itemId);
           if (data != null && data.Count() > 0)
           {
               // Get unique categories
               var uniqueCategories = data.OrderBy(x => x.Category).Select(x => x.Category).Distinct();
               t.Categories = uniqueCategories.ToList();

               // Get series data
               t.SeriesData = getSeriesData(data, t.Categories.ToArray<string>());
           }
       }
       return t;
   }
公共图表GetItem(int itemId) { 图t; 使用(IDataContext ctx=DataContext.Instance()) { var rep=ctx.GetRepository(); t=rep.GetById(itemId); var repD=ctx.GetRepository(); var data=repD.Get(itemId); if(data!=null&&data.Count()>0) { //获取唯一类别 var uniqueCategories=data.OrderBy(x=>x.Category).Select(x=>x.Category.Distinct(); t、 Categories=uniqueCategories.ToList(); //获取序列数据 t、 SeriesData=getSeriesData(data,t.Categories.ToArray()); } } 返回t; }
我有几种方法可以做到这一点

如果不需要更新或插入视图的表,我认为使用视图是一种很好的方法。我已经成功地将视图用作DAL2表,但即使它是模式绑定的,也只有GET可以工作。如果您只是在读取数据,那么这是最好的方法

我还通过从呼吸方法连接儿童数据来完成这项工作。 在中(完整的源代码在相关文件部分),我有一个基于带有ignorecolumn属性的表的DAL2对象

[TableName("DNNuclear_DataVisualizer_Chart")]
[PrimaryKey("ChartId", AutoIncrement = true)]
[Cacheable("Charts", CacheItemPriority.Default, 20)]
[Scope("ModuleId")]
public class Chart
{
    ///<summary>
    ///</summary>
    public int ChartId { get; set; }
...
    [IgnoreColumn]
    public IList<SeriesData> SeriesData { get; set; }
...
[表名(“DNNuclear\u数据可视化工具\u图表”)]
[PrimaryKey(“图表ID”,自动递增=真)]
[可缓存(“图表”,CacheItemPriority.Default,20)]
[范围(“模块ID”)]
公共课程表
{
///
///
公共int ChartId{get;set;}
...
[忽略列]
公共IList系列数据{get;set;}
...
}

在DAL2存储库方法中填充该属性

   public Chart GetItem(int itemId)
   {
       Chart t;
       using (IDataContext ctx = DataContext.Instance())
       {
           var rep = ctx.GetRepository<Chart>();
           t = rep.GetById(itemId);
           var repD = ctx.GetRepository<ChartData>();
           var data = repD.Get(itemId);
           if (data != null && data.Count() > 0)
           {
               // Get unique categories
               var uniqueCategories = data.OrderBy(x => x.Category).Select(x => x.Category).Distinct();
               t.Categories = uniqueCategories.ToList();

               // Get series data
               t.SeriesData = getSeriesData(data, t.Categories.ToArray<string>());
           }
       }
       return t;
   }
公共图表GetItem(int itemId) { 图t; 使用(IDataContext ctx=DataContext.Instance()) { var rep=ctx.GetRepository(); t=rep.GetById(itemId); var repD=ctx.GetRepository(); var data=repD.Get(itemId); if(data!=null&&data.Count()>0) { //获取唯一类别 var uniqueCategories=data.OrderBy(x=>x.Category).Select(x=>x.Category.Distinct(); t、 Categories=uniqueCategories.ToList(); //获取序列数据 t、 SeriesData=getSeriesData(data,t.Categories.ToArray()); } } 返回t; }
太好了,这正是我所想的,只是想确保我没有朝着错误的方向走太远。你链接到的视频/文章非常棒。如果DNN公司在他们的DAL2维基上投入更多的精力,那就太好了,因为它是核心的一个重要部分。简单poco的简单CRUD操作很容易,但实际模块通常比这更复杂。还有一些简单的例子,比如从sql视图获取静态数据。无论如何,谢谢。接下来,您是否使用了具有CacheItemPriority的sql视图(定义为peta poco表)?我正在使用它,即使在20分钟超时后缓存也不会重置。看到这篇帖子:太好了,这就是我所想的,只是想确保我没有偏离正确的方向。你链接到的视频/文章非常棒。如果DNN公司在他们的DAL2维基上投入更多的精力,那就太好了,因为它是核心的一个重要部分。简单poco的简单CRUD操作很容易,但实际模块通常比这更复杂。还有一些简单的例子,比如从sql视图获取静态数据。无论如何,谢谢。接下来,您是否使用了具有CacheItemPriority的sql视图(定义为peta poco表)?我正在使用它,即使在20分钟超时后缓存也不会重置。见此帖: