装饰者模式的学习(c#) EF SaveChanges() 报错(转载) C# 四舍五入 保留两位小数(转载) DataGridView样式生成器使用说明 MSSQL如何将查询结果拼接成字符串 快递查询 C# 通过smtp直接发送邮件 C# 带参访问接口,WebClient方式 C# 发送手机短信 文件 日志 写入 与读取
案例转自https://www.cnblogs.com/stonefeng/p/5679638.html
//主体基类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DecoratorModeDemo
{
abstract class PanCake
{
public string desc = "";
public abstract string getDesc();
public abstract double price();
}
}
//主体:肉夹馍
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DecoratorModeDemo
{
class Roujiamo:PanCake
{
public Roujiamo()
{ this.desc = "肉夹馍"; }
public override string getDesc()
{
return desc;
}
public override double price()
{
return 6;
}
}
}
//主体手抓饼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DecoratorModeDemo
{
class TornCake:PanCake
{
public TornCake()
{
this.desc = "手抓饼";
}
public override string getDesc()
{
return desc;
}
public override double price()
{
return 4;
}
}
}
//装饰者基类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DecoratorModeDemo
{
abstract class Condiment:PanCake
{
public PanCake panCake;
public Condiment(PanCake p)
{
panCake = p;
}
}
}
//装饰者煎蛋
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DecoratorModeDemo
{
class FiredEgg:Condiment
{
public FiredEgg(PanCake pancake):base(pancake)
{
}
public override string getDesc()
{
return panCake.getDesc()+",煎蛋";
}
public override double price()
{
return this.panCake.price() + 2;
}
}
}
//主函数
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DecoratorModeDemo
{
class Program
{
static void Main(string[] args)
{
TornCake torncake = new TornCake();
Console.WriteLine(torncake.getDesc() + " ¥" +torncake.price().ToString());
PanCake roujiamo = new Roujiamo();
roujiamo = new FiredEgg(roujiamo);
roujiamo = new FiredEgg(roujiamo);
Console.WriteLine(roujiamo.getDesc()+" ¥"+roujiamo.price());
Console.ReadLine();
}
}
}
运行结果
心得:装饰者派生自主体基类,继承了主体需要操作的对象。同时装饰者的成员对象中有主体,用以耦合主体。通过创建不同的装饰者派生类,重写主体类方法来实现对主体类的不同操作。
roujiamo = new FiredEgg(roujiamo)实际上roujiamo已经变成了煎蛋,只不过这个煎蛋的成员包含肉夹馍,返回的方法经重写已经用原肉夹馍处理过了。
EF SaveChanges() 报错(转载)
最佳答案
报这个错是因为,提交了主键重复的数据,虽然未提交到数据库中
但是现在的EF上下文中已经包含了我提交的数据,下次在提交正确数据时,
原来添加到上下文中的数据依然还在。。如何处理这个问题呢?
using(var db = new .......())
{
db.save...........();
}
其他:1、dbcontext 每次使用时重新new一个,不要使用单例模式,可以考虑单元模式。
2、EF 上下文被我设置成了静态的了
3、我也是Commit时SaveChanges() 方法报更新条目出错,
别人说是数据的id 重复,但我调试看了Add 的三个id 都没重复,
后来发现是Add对象的DateTime 类型的属性没有赋值。赋值之后就能保存到数据库了。
4、一次插入多行时,其中有一个重复(我创建了唯一复合索引),导致所有都插入失败,而且重新运行插入依然失败。这说明了公用一个上下文的坏处,
后来改用Using和cry catch。不出错就一次插入,出错就循环赋值中using多个上下文,保证不重复部分插入成功。
来源:https://q.cnblogs.com/q/44768/
- .Net语言 APP开发平台——Smobiler学习日志:如何在手机中调用邮件发送接口
- [原创]java WEB学习笔记55:Struts2学习之路---详解struts2 中 Action,如何访问web 资源,解耦方式(使用 ActionContext,实现 XxxAware 接口),耦合方式(通过ServletActionContext,通过实现 ServletRequestAware, ServletContextAware 等接口的方式)
- .Net语言 APP开发平台——Smobiler学习日志:如何在手机中调用邮件发送接口
- C#中小数点后保留两位小数,四舍五入的函数及使用方法(转)
- C#中小数点后保留两位小数,四舍五入的函数及使用方法
- 转载 : 一个Windows后台服务(.Net的C#版) - 定时访问数据库循环发送手机短信
- C#中小数点后保留两位小数,四舍五入的函数及使用方法
- 如何在C#中使用内嵌资源文件(转载学习)
- CentOS6.5通过mailx使用外部SMTPSSL的方式发送邮件
- C#中小数点后保留两位小数,四舍五入的函数及使用方法
- C# 发送邮件到smtp服务器错误:以一种访问权限不允许的方式做了个访问套接字的尝试
- C# 小数点后保留两位小数,四舍五入的函数及使用方法
- log4net使用(保存日志分别 到文本文件,smtp发送邮件,mssql数据库,mysql数据库)
- C#使用Log4Net记录日志(想直接转载的,但是不支持转到这上面来,复制来的,作者勿怪,学习用)
- C# 小数点后保留两位小数,四舍五入的函数及使用方法
- 如何在C#中使用内嵌资源文件(转载学习)
- python - 如何通过GMail发送邮件:smtplib的使用
- 总结群里讨论的关于浮点数,如何四舍五入保留两位小数的处理方式
- C#中实现zip协议,通过WebRequest查询zip文件内容。统一访问接口
- C#中小数点后保留两位小数,四舍五入的函数及使用方法