小编lit*_*rva的帖子

LINQ to SQL的特点

我遇到了LINQ to SQL的一些特性.

使用相对简单的查询,我想选择一些字段,但将日期字段格式化为字符串,我首先这样做:

        var list = dataContext.MyLists.Single(x => x.ID == myId);

        var items = from i in list.MyItems
                    select
                        new
                            {
                                i.ID,
                                i.Sector,
                                i.Description,
                                CompleteDate = i.CompleteDate.HasValue ? i.CompleteDate.Value.ToShortDateString() : "",
                                DueDate = i.DueDate.HasValue ? i.DueDate.Value.ToShortDateString() : ""
                            };                               
Run Code Online (Sandbox Code Playgroud)

后来我尝试了以下查询,这是完全相同的,除了我直接从我的dataContext查询,而不是我的第一个查询中的一个元素:

        var items = from i in dataContext.MyLists
                    select
                        new
                            {
                                i.ID,
                                i.Sector,
                                i.Description,
                                CompleteDate = i.CompleteDate.HasValue ? i.CompleteDate.Value.ToShortDateString() : "",
                                DueDate = i.DueDate.HasValue ? i.DueDate.Value.ToShortDateString() : ""
                            };
Run Code Online (Sandbox Code Playgroud)

第一个运行正常,但第二个查询产生一个:

无法将表达式"..."转换为SQL,并且无法将其视为本地表达式.

如果我删除格式化日期的行,它工作正常.如果我删除.HasValue检查它也可以正常工作,直到有空值.

有任何想法吗?

安东尼

c# linq linq-to-sql

5
推荐指数
3
解决办法
4763
查看次数

在ASP.NET MVC应用程序中托管WCF服务?

我有一个非常大的webapp,它是用MVC构建的.我也将公共代码抽象到一个框架中,该框架位于一个单独的项目中.希望这个框架将在不久的将来用于其他项目.有一些Silverlight应用程序是此框架的一部分,他们的一项工作是一次上传文件块.为了实现这一点,我希望它们与WCF服务进行通信,该服务也存在于框架项目中.我遇到了这个问题.

我将添加到我的框架项目中的app.config数据VS2008复制到web.config中,但这似乎没有用.

经过一些搜索,我发现你可以通过创建一个.svc文件和一个匹配的.cs文件编写一个带有代码的服务,所以我尝试创建MyService.svc,如下所示:

<% @ServiceHost language="C#"
Service="MyFramework.MyService"
%>
Run Code Online (Sandbox Code Playgroud)

由于我的服务存在于另一个项目中,因此没有代码可以引用文件,所以我假设Namespace.Class引用就足够了.

我还将MyService.svc/{*pathInfo}添加到Global.asax文件中的Ignored Routes.

但是,当我尝试浏览localhost:x/MyService.svc时,或者当我尝试使用VS2008中的"添加服务"工具查找服务时,它似乎只是挂起.

我究竟做错了什么?

安东尼

silverlight asp.net-mvc wcf

5
推荐指数
1
解决办法
7581
查看次数

在IIS上进行远程调试-访问被拒绝的噩梦!

我们这里有两台Win2k3服务器,一台是域控制器,另一台是我们的Web服务器。

我正在将ASP.NET MVC Web应用程序设置作为Web服务器上IIS中的网站运行。

我已经将x86远程调试工具复制到Web服务器,登录到管理员帐户并运行msvsmon。我将我登录到工作站的用户添加到了权限列表中。

在VS2008中打开了Web应用程序项目,然后转到附加到流程,这是我的设置:

Transport: Default
Qualifier: OURDOMAIN\AdminUsername@OURWEBSERVER
Attach To: Managed Code

Selected: w3wp.exe
Run Code Online (Sandbox Code Playgroud)

单击“ 附加”后,窗口会闪烁几秒钟,然后我得到:

Unable to attach to the process. Access is denied.
Run Code Online (Sandbox Code Playgroud)

我尝试右键单击msvsmon并使用“运行方式”以与我登录到我的计算机相同的帐户运行它,但仍然没有区别。

但是,如果我将“ 附加到”字段更改为“ 自动:本机代码”,它可以很好地附加,但是我无法调试任何托管的.NET代码。

这让我感到困惑-有什么想法吗?

安东尼

asp.net debugging asp.net-mvc visual-studio-2008

5
推荐指数
1
解决办法
2604
查看次数

插入时的Azure表存储抛出异常:(409)冲突

我正在使用Azure表存储来记录来自我的MVC应用程序的访问者信息,但它有时会引发以下异常:

[WebException: The remote server returned an error: (409) Conflict.]
   System.Net.HttpWebRequest.GetResponse() +1399
   Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync(RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Core\Executor\Executor.cs:677

[StorageException: The remote server returned an error: (409) Conflict.]
   Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync(RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Core\Executor\Executor.cs:604
   Microsoft.WindowsAzure.Storage.Table.TableOperation.Execute(CloudTableClient client, CloudTable table, TableRequestOptions requestOptions, OperationContext operationContext) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Table\TableOperation.cs:44
Run Code Online (Sandbox Code Playgroud)

这似乎发生在我第一次访问网站一段时间不活动后,然后当我点击刷新,页面加载,从那时起的每次点击都很好.

以下是导致异常的代码部分:

  var visit = new TrackerVisitEntity(id, url, referer);
  var insertOperation = TableOperation.Insert(visit);
  _table.Execute(insertOperation);
Run Code Online (Sandbox Code Playgroud)

更新

正如下面的注释和两个答案所述,问题是有时页面连续快速加载两次,我使用GUID(用户独有)作为分区键,当前日期时间作为行键,这会导致重复的实体并导致异常.

虽然Amor的回答更加深入,但Dogu的简单解决方案就是我使用过的,所以我标记了他的正确答案.感谢大家.

azure azure-table-storage

5
推荐指数
2
解决办法
8681
查看次数

问题数据绑定到UserControl上的DependencyProperty

我有一个UserControl我已经添加了一个依赖属性:

public partial class WordControl : UserControl
{

    // Using a DependencyProperty as the backing store for WordProperty.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty WordProperty =
        DependencyProperty.Register("WordProperty", typeof(string), typeof(WordControl), new FrameworkPropertyMetadata("", OnWordChange));

    public string Word
    {
        get { return (string)GetValue(WordProperty); }
        set { SetValue(WordProperty, value); }
    }
Run Code Online (Sandbox Code Playgroud)

当我在XAML中手动设置Word属性时,哪个工作正常:

<WordGame:WordControl Word="Test"></WordGame:WordControl>
Run Code Online (Sandbox Code Playgroud)

但是,我想将此UserControl用作ListBox的Item Template的一部分,并使用Data Binding来设置单词:

    <ListBox Name="WordList" IsEnabled="False" IsHitTestVisible="False">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <WordGame:WordControl Word="{Binding}"></WordGame:WordControl>
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
Run Code Online (Sandbox Code Playgroud)

运行时会出现以下错误:

无法在"WordControl"类型的"Word"属性上设置"绑定".'绑定'只能在DependencyObject的DependencyProperty上设置.

由于UserControl继承自DependencyObject,我只能假设问题在于DependencyProperty,但没有任何数量的Google搜索找到了答案.

有任何想法吗?

wpf binding

4
推荐指数
1
解决办法
5278
查看次数

Hibernate级联删除包

使用NHibernate构建了大部分DAL后,我现在发现在我的HBM文件中也需要考虑SQL Server的Cascade On Delete规则.我一直在为我的所有收藏品使用包,但似乎没有办法将一个cascade ="delete"属性添加到包中.我可以将所有行李更改为套装,但这似乎意味着我已将我模型上的所有IList <>更改为PersistentGenericSet <> s,我并不喜欢这样做.

有什么建议?

安东尼

nhibernate orm

3
推荐指数
1
解决办法
4357
查看次数

强制服务中的线程等待另一个线程完成

我正在编写一种服务,它有五种不同的方法,可能需要5秒到5分钟才能运行.

该服务将安排这些不同的方法以不同的间隔运行.

我不希望任何方法同时运行,所以我如何检查方法是否正在运行并在其完成时将自己排队运行?

安东尼

.net c# multithreading

2
推荐指数
1
解决办法
1704
查看次数

Linq to NHibernate在一个请求中生成3,000多个SQL语句!

在过去的几个月里,我一直在使用Linq到NHibernate开发一个webapp,但是直到现在还没有描述它生成的SQL.使用NH Profiler,现在看来,当执行Linq表达式时,下面的代码块会使DB超过3,000次.

        var activeCaseList = from c in UserRepository.GetCasesByProjectManagerID(consultantId)
                             where c.CompletionDate == null
                             select new { c.PropertyID, c.Reference, c.Property.Address, DaysOld = DateTime.Now.Subtract(c.CreationDate).Days, JobValue = String.Format("£{0:0,0}", c.JobValue), c.CurrentStatus };
Run Code Online (Sandbox Code Playgroud)

存储库方法如下所示:

    public IEnumerable<Case> GetCasesByProjectManagerID(int projectManagerId)
    {
        return from c in Session.Linq<Case>()
               where c.ProjectManagerID == projectManagerId
               select c;
    }
Run Code Online (Sandbox Code Playgroud)

它似乎首先运行初始Repository查询,然后遍历所有结果检查以查看CompletionDate是否为null,但是首先发出查询以获取c.Property.Address.

因此,如果初始查询返回2,000条记录,即使其中只有五条没有CompletionDate,它仍会触发SQL查询以返回2,000条记录的地址详细信息.

我想象的方式可行,是它会评估所有WHERE和SELECT子句并简单地合并它们,因此初始查询将如下:

SELECT ... WHERE ProjectManager = @ p1 AND CompleteDate IS NOT NULL

哪个会产生5个记录,然后它可以触发另外5个查询来获取地址.我在这里期待太多,还是我只是做错了什么?

安东尼

linq nhibernate linq-to-nhibernate

2
推荐指数
1
解决办法
267
查看次数

NHibernate IQueryable似乎没有延迟执行

我正在使用NHibernate 3.2,我有一个存储库方法,如下所示:

    public IEnumerable<MyModel> GetActiveMyModel()
    {
        return from m in Session.Query<MyModel>()
               where m.Active == true
               select m;
    }
Run Code Online (Sandbox Code Playgroud)

哪个按预期工作.但是,有时当我使用这种方法时,我想进一步过滤它:

    var models = MyRepository.GetActiveMyModel();
    var filtered = from m in models
                   where m.ID < 100
                   select new { m.Name };
Run Code Online (Sandbox Code Playgroud)

其中产生与第一个相同的SQL,第二个过滤器和选择必须在事后完成.我认为LINQ中的重点是它形成了一个表达树,在需要时它被解开,因此可以创建正确的作业SQL,从而节省了我的数据库请求.

如果没有,这意味着我的所有存储库方法都必须准确地返回所需的内容,并且我不能在不受惩罚的情况下进一步使用LINQ.

我弄错了吗?

更新

响应下面的评论:我省略了迭代结果的行,这导致初始SQL运行(WHERE Active = 1),第二个过滤器(ID <100)显然在.NET中完成.

另外,如果我用第二块代码替换

var models = MyRepository.GetActiveMyModel();
var filtered = from m in models
               where m.Items.Count > 0
               select new { m.Name };
Run Code Online (Sandbox Code Playgroud)

它生成初始SQL以检索活动记录,然后为每条记录运行一个单独的SQL语句,以找出它有多少项,而不是像我期望的那样写一些东西:

SELECT Name 
FROM MyModel m 
WHERE Active = 1 
    AND …
Run Code Online (Sandbox Code Playgroud)

linq nhibernate linq-to-nhibernate

2
推荐指数
1
解决办法
1440
查看次数

Azure Webjobs - 指定ZIP中要运行的文件

我正在从将多个虚拟机的应用程序实例托管到Azure中的多个WebApp.我还有一个批处理工具,我在计划的不同时间运行以执行不同的工作.它所做的特定工作由命令行参数控制,使用Windows任务计划很容易.

在运行WebJob时似乎没有办法指定参数,但我确实找到了以下SO文章,建议使用包含参数的Powershell脚本:

Azure Webjobs的命令行参数

优秀的解决方案,将解决我的问题.但是,当上传包含​​我的应用程序,相关dll和PowerShell文件作为WebJob的zip时,似乎没有办法指定我想将powershell文件用作WebJob,而是使用exe代替.

azure azure-webjobs

2
推荐指数
2
解决办法
3775
查看次数

NHibernate 将过滤器应用于袋子

我有一个在 XML 中映射的父/子关系。一个 Booking 可以有很多付款,所以我的 Booking 模型有一个 IList Payments {get;set;} 属性,我将它映射到 XML 中,如下所示:

<bag name="Payments" inverse="true">
  <key column="BookingId"/>
  <one-to-many class="Payment, NHibernateOneToMany"/>
</bag>
Run Code Online (Sandbox Code Playgroud)

这很好用,但现在我需要引入软删除的概念,所以我在 Payment 中添加了一个 Deleted bool 列,我希望 Payments on Booking 只包含未删除的,所以我想做像这样:

<bag name="Payments" inverse="true">
  <key column="BookingId"/>
  <one-to-many class="Payment, NHibernateOneToMany"/>
  <sql>SELECT * FROM Payment WHERE Deleted = 0 AND BookingId = bookingId</sql>
</bag>
Run Code Online (Sandbox Code Playgroud)

我已经研究过使用过滤器,但它们似乎只提供在启用的情况下使用过滤器的能力 - 我希望这个属性每次都排除所有已删除的项目,这样就不会出现错误。

实现这一目标的最佳方法是什么?

nhibernate nhibernate-mapping

1
推荐指数
1
解决办法
539
查看次数