2017-04-08 75 views
0

我试图在我的Umbraco支持的网站中使用Petapoco。在我的poco上,我有一个名为Created的列,它有一个默认的sql值(getDate())。我希望在Petapoco插入和更新时忽略该列,但不能读取。Petapoco缺少属性IgnoreOnInsert,IgnoreOnUpdate

任何想法如何才能达到优雅?也许使用自定义映射器或在Petapoco引擎中包含一些新属性(如IgnoreOnInsert,IgnoreOnUpdate)。

我一直在使用一些黑客,其中一个每个表有两个poco,一个用于插入更新,另一个用于读取。但很难接受,令人满意。

回答

0

我通常只是做一个类的构造函数,并在那里设置日期属性。像

public class WhatEvs 
{ 
    ... 
    public WhatEvs() 
    { 
     DateCreated = DateTime.Now; 
    } 
} 
+0

是的,这也是黑客之一,但因为那么你需要时刻小心更新它们之前滋润POCO的,我不喜欢它100%,所以你不要重写原始值。这也意味着增加sql(和web服务器)上的负载,就像在每次我们需要从sql进行读操作之前一样。除了团队中的新开发人员,如果没有对此约定进行指导,可能会执行一些代码并覆盖poco的所有初始值。 我想要一个类似于IgnoreOnInsert,IgnoreOnUpdate等属性的解决方案。 – Andrei

0

如果有人仍然对此感兴趣,我最终找到了一个很好的解决方案。 那就是停止使用Petapoco并切换到NPoco,它有一个很好的属性叫'ComputedColumn'。 如果使用[ComputedColumn]属性修饰属性,那么当NPoco生成插入和更新查询时将不会使用该属性,但它将用于所选查询。 这使我可以很好地处理像CreatedDate或UniqueGuid这样的数据库处理值,但我在查询时无法触及它们。 感谢阿龙谁好心这里回答了这个问题: https://github.com/CollaboratingPlatypus/PetaPoco/issues/421#issuecomment-348390149