Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >[计算]和[写(假)]属性之间有什么区别?

[计算]和[写(假)]属性之间有什么区别?
EN

Stack Overflow用户
提问于 2019-08-27 02:50:56
回答 1查看 3.3K关注 0票数 5

资源解释了Computed如何排除属性(仅在更新中?)。

指定属性应排除在更新之外。 表(“发票”)公共类InvoiceContrib { Key public int InvoiceID { get;set;}公共字符串代码{ get;set;} public InvoiceKind种类{ get;set;}写(假)公共字符串FakeProperty { get;set;}使用(var连接= My.ConnectionFactory()) { connection.Open();var发票= connection.GetAll().ToList();// FakeProperty跳过invoices.ForEach(x => x.FakeProperty += "z");isSuccess =connection.Update(发票);}

但是,Write(false)不是实现了同样的目的吗?[Computed][Write(false)]有什么区别?

编辑:

为了回答我的问题,我刚刚检查了资源连系。它差点撞到这上面!是否有人能确认这两个属性是否执行相同的操作,但只是用两种不同的方式来表达,从而给他们的用户提供更好的抽象?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-27 03:44:31

[Computed]Write(false)都将忽略属性,而INSERTUPDATE操作都将忽略该属性。所以,两者都是一样的。你可以用其中任何一种。

文档 说:

  • [Write(true/false)] -这个属性是可写的(不能)
  • [Computed] -此属性是计算的,不应该是更新的一部分。

关于Write**:** Write**:**的

正如上面文档的第一行所述,Write处理“可写”行为。这应该包括INSERTUPDATE

这也可以在源代码这里中得到证实。

变量属性= type.GetProperties().Where(IsWriteable).ToArray();.私有静态bool IsWriteable(PropertyInfo pi) { var属性=PropertyInfo false).AsList();if (attributes.Count = 1)返回true;var writeAttribute =(WriteAttribute)属性;返回writeAttribute.Write;}

关于Computed**:** Computed**:**的

不过,上面文档中的第二行比较宽泛。

不应该是更新的一部分

这是否意味着它可以是INSERT的一部分?不,它没有;它也涵盖了这两种行为。下面的代码可以观察到这一点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE TestTable
(
    [ID]            [INT] IDENTITY (1,1) NOT NULL CONSTRAINT TestTable_P_KEY PRIMARY KEY,
    [Name]          [VARCHAR] (100) NOT NULL,
    [ComputedCol]   [VARCHAR] (100) NOT NULL DEFAULT '',
    [NonWriteCol]   [VARCHAR] (100) NOT NULL DEFAULT ''
)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[Table("TestTable")]
public class MyTable
{
    [Key]
    public int ID { get; set; }

    public string Name { get; set; }

    [Computed]
    public string ComputedCol { get; set; }

    [Write(false)]
    public string NonWriteCol { get; set; }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int id;
using(SqlConnection conn = new SqlConnection(@"connection string"))
{
    MyTable myTable = new MyTable();
    myTable.Name = "Name";
    myTable.ComputedCol = "computed";
    myTable.NonWriteCol = "writable";

    conn.Insert<MyTable>(myTable);

    id = myTable.ID;
}

using(SqlConnection conn = new SqlConnection(@"connection string"))
{
    MyTable myTable = conn.Get<MyTable>(id);
    myTable.Name = "Name_1";
    myTable.ComputedCol = "computed_1";
    myTable.NonWriteCol = "writable_1";

    conn.Update<MyTable>(myTable);
}

使用上面的代码,您将注意到,无论您选择装饰属性的哪个属性,它都不会被考虑为INSERTUPDATE。因此,基本上,这两个属性都扮演着相同的角色。

这一点可以在github上的Dapper.Tests.Contrib测试项目中得到进一步证实。

表(“汽车”)公共类Car { public int Id { get;set;}公共字符串名称{ get;set;}计算出的公共字符串计算{ get;set;}}./插入的计算属性应被忽略(connection.Insert(新车{ Name =“沃尔沃”,Computed =“此属性应被忽略”}); 资料来源:12

查看上述代码中分配给属性的注释和值,可以清楚地表明,Computed也应该忽略INSERT操作的属性;这是测试的预期结果。

为什么这两种方法是为了同样的目的而提供的,目前还不清楚。它会引起混乱。

以下是一些附加的参考资料:

评论1

为此,我使用[Computed][Write("False")]。这不适合你的情况吗?

评论2

很高兴我能帮忙。每一天都是上学的日子!我不知道为什么它们都存在,虽然我认为它们在功能上是一样的。我倾向于使用[Computed],因为它稍微容易输入。

评论3

我理解使用Dapper.Contrib可以在写操作期间使用WriteComputed属性忽略属性。但是,这将忽略insert和update上的属性。我需要一种在更新时忽略属性的方法。我的建议是增加两个属性..。也许叫Insertable(bool)Updateable(bool)。当将false值传递给这些值时,框架将排除给定操作的该属性。对于一个非常常见的问题,这是一种轻量级、直截了当的方法。

我不认为Computed属性与计算柱有任何关系,因为Dapper.Contrib支持多RDBMS。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57673107

复制
相关文章
jQuery源码研究:jQuery原型对象上的属性方法(上)
今天看下简化框架的第二部分:line: (146 - 225) 为jQ对象添加一些方法和属性。
前端_AWhile
2019/08/29
1.1K0
jQuery原理(原型上的属性、方法)
jQuery存在两个each方法,一个类方法,一个对象方法。当实现类方法时,只需要让对象方法调用类方法即可实现。
Dreamy.TZK
2020/06/23
9710
react native props上存在的属性,显示不存在
问题:类型“Readonly<{}> & Readonly<{ children?: ReactNode; }>”上不存在属性“navigation”。ts(2339) 解决方法: export d
windseek
2019/07/08
2.6K0
jQuery源码研究:jQuery原型对象上的属性方法(下)
each()方法:为每个匹配的元素集合执行回调函数,是一个jQuery版的遍历方法。
前端_AWhile
2019/08/29
8790
HTMLElement对象
任何HTML元素都继承于HTMLElement对象,一些元素直接实现这个接口,而另一些元素通过多层继承来实现它。
WindRunnerMax
2021/02/22
1.2K0
jQuery之datetimepicker控件(时间单位精确到分钟)
一、效果图 image.png image.png image.png image.png 二、代码 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1
week
2018/08/24
2.5K0
jQuery之datetimepicker控件(时间单位精确到分钟)
jQuery 属性操作
​ jQuery 常用属性操作有三种:prop() / attr() / data() ;
梨涡浅笑
2022/05/08
1.8K0
jQuery 属性操作
jQuery 常用属性操作有三种:prop() / attr() / data() ;
清出于兰
2020/10/26
1.2K0
jQuery 属性操作
jQuery 常用属性操作有三种:prop() / attr() / data() ;
星辰_大海
2020/10/09
1.5K0
jQuery 属性操作
三、jQuery属性操作
2、如何操作属性 对象.属性名称 = 值 对象.属性名称 对象[‘属性名称’] = 值 对象[‘属性名称’] Javascript
Dreamy.TZK
2020/06/16
3.8K0
三、jQuery属性操作
jQuery基础--jQuery特殊属性操作
区别:html方法会识别html标签,text方法会那内容直接当成字符串,并不会识别html标签。
eadela
2019/09/29
2.1K0
jquery根据属性选择
有信仰的人不会孤独。——阿列克谢耶维奇 分享一个jquery选择器的小技巧 我们可以通过自定义属性键值选中一个元素 例如如下元素: <div ruben="vampire">阿超</div> 然后我们通过ruben=vampire选中这个div 就可以如下写法: let vampire = $('div[ruben="vampire"]') 我们可以简单测试一下输出里面的内容 <div ruben="vampire">阿超</div> <script type="text/javascript">
阿超
2022/08/17
1.9K0
jquery根据属性选择
jquery data属性的使用
var func=function(){console.log("test")}; $("div").data("test",func); $("div").data("test")(); 输出结果是test 注意:data方法是jquery中的方法不是原生js里面的方法 js原生的dataset方法 var func=function(){console.log("test")}; var a = document.createElement("div"); a.dataset.test=func; a.
windseek
2018/05/15
1.2K0
jQuery——工具及属性(案例)
首先来看一下今天的第一个工具,each()。这个我们上节课好像用过。什么时候用的?大家还记得吗?在遍历多选框的时候我们用的就是each()。each顾名思义 大家都明白是用来遍历的,今天我们就主要用each()来遍历一下数组 和 对象。怎么遍历数组和对象呢?咱们来看一下。
用户10196776
2022/11/18
6560
前端基础-JQuery操作属性
第5章 JQuery操作属性 5.1 attr操作 设置单个属性 // 第一个参数:需要设置的属性名 // 第二个参数:对应的属性值 // $obj.attr(name, value); // 用法举例 $('img').attr('title','哎哟,不错哦'); $('img').attr('alt','哎哟,不错哦'); 设置多个属性 // 参数是一个对象,包含了需要设置的属性名和属性值 // $obj.attr(obj) // 用法举例 $('img').attr({ title:'哎哟,
cwl_java
2020/03/26
6770
jQuery 文本属性值
jQuery的文本属性值常见操作有三种:html() / text() / val() ; 分别对应JS中的 innerHTML 、innerText 和 value 属性。
星辰_大海
2020/10/09
2.5K0
jQuery 文本属性值
Jquery attr()方法 属性赋值和属性获取
jquery中用attr()方法来获取和设置元素属性,attr是attribute(属性)的缩写,在jQuery DOM操作中会经常用到attr(),attr()有4个表达式。
软件小生活
2021/08/16
10.5K0
Jquery attr()方法 属性赋值和属性获取
jQuery - 设置内容和属性
下面的例子演示如何通过 text()、html() 以及 val() 方法来设置内容:
陈不成i
2021/07/22
2K0
jQuery 文本属性值
​ jQuery的文本属性值常见操作有三种:html() / text() / val() ; 分别对应JS中的 innerHTML 、innerText 和 value 属性。
梨涡浅笑
2022/05/08
3K0
jquery 属性&CSS操作 笔记
这是一个读写双用的方法,用来处理input的value,当方法没有参数的时候返回input的value值,当传递了一个参数的时候,方法修改input的value值为参数值
bamboo
2019/01/29
1.3K0
jquery 属性&CSS操作 笔记

相似问题

在尝试登录时获取(405)方法不允许错误

17

错误405 (在发出Ajax请求时不允许方法)

14

当尝试使用ngrok作为松弛请求URL时,"Error 405方法不允许“

124

角度7:发送post请求导致错误405 (方法不允许)

30

尝试POST AJAX请求时的post 405 (方法不允许)- Laravel 4

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文