EntityFramework学习——EF开发模式

好久没写EF的东西,使用起来也觉得生疏,最近EF5发布,学习了一下新知识,总结一番。

1.Entity Framework架构原理回顾

什么是EF:EntityFrameWork是微软一个开源的ORM(对象关系映射)框架,是微软主推的数据存储技术,常用于构建数据存储层,使应用程序以对象模型的方式访问关系数据库的内容。

EF的架构和原理:EF的核心内容是EDM,具体可参考前一篇内容。可以理解为它是一个ADO.NET的增强版,它的底层是ADO.NET provider,上层则是应用程序,它提供了更灵活,更简单方便的数据存取方式。

EF的优点:它是一个开源框架,支持多种数据库(目前看来最稳定的是SQL Server,而Oracle的支持一直不太完美),将应用程序和数据库结构很好的分隔开,支持多种开发模式。

阅读更多

WordPress安装WP-DBManager出现警告的解决办法

给WP安装数据库备份工具WP-DBManager,完成后显示

Your backup folder MIGHT be visible to the public

To correct this issue, move the .htaccess file from wp-content/plugins/wp-dbmanager to /home/……/zcmhi.com/htdocs/wp-content/backup-db

可以用以下方式解决:

1.自制.htaccess  文件内容,该内容可在wp-content/plugins/wp-dbmanager/ 的htaccess  文件中找到。

阅读更多

wpf失去焦点事件中重获焦点

WPF 在TextBox失去焦点时检测数据,出错重新获得焦点解决办法
在WPF的TextBox的LostFocus事件中直接使用Focus()方法会出现死循环的问题
正确的使用方式有两种方法:
方法一:

1
2
3
4
5
6
7
8
9
10
11
private void textBox3_LostFocus(object sender, RoutedEventArgs e)
{
if (textBox3.Text != "abc")
{
this.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Render,
new Action(() =>
{
textBox3.Focus();
}));
}
}

方法二,使用LostKeyboardFocus方法:

1
2
3
4
5
6
7
private void textBox3_LostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
if (textBox3.Text != "abc")
{
textBox3.Focus();
}
}

说明:在msdn上就查找到:

阅读更多

CreateBitmapSourceFromHBitmap内存泄露

用c#做图像处理的时候需要用到System.Drawing.Bitmap。在WPF中显示图像的Image控件接受的数据源是ImageSource,因此使用System.Drawing.Bitmap进行图像处理之后要把System.Drawing.Bitmap转换成ImageSource,转换方法如下:

1
2
3
4
5
6
7
System.Drawing.Bitmap m_Bitmap = new System.Drawing.Bitmap("c:temptest.jpg", false); 
IntPtr ip = m_Bitmap.GetHbitmap();
BitmapSource bitmapSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
ip, IntPtr.Zero, Int32Rect.Empty,
System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
DeleteObject(ip);
imageLarge.Source = bitmapSource;

其中DeleteObject的声明如下:

1
2
[DllImport("gdi32")]  
static extern int DeleteObject(IntPtr o);

使用过System.Drawing.Bitmap后一定要用DeleteObject释放掉对象,不然内存不释放,很快系统内存就消耗光了。

阅读更多

SQLServer中DateTime数据格式

在oracle中可以直接使用ToChar(getdate(),’yyyy-mm-dd’)

但在SQL Server 中需要以下的参数方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
	
select CONVERT(varchar, getdate(), 120 )

2004-09-12 11:06:08

select CONVERT(varchar(12) , getdate(), 111 )

2004/09/12

select CONVERT(varchar(12) , getdate(), 112 )

20040912

select CONVERT(varchar(12) , getdate(), 102 )

2004.09.12

select CONVERT(varchar(12) , getdate(), 101 )

09/12/2004

select CONVERT(varchar(12) , getdate(), 103 )

12/09/2004

select CONVERT(varchar(12) , getdate(), 104 )

12.09.2004

select CONVERT(varchar(12) , getdate(), 105 )

12-09-2004

select CONVERT(varchar(12) , getdate(), 106 )

12 09 2004

select CONVERT(varchar(12) , getdate(), 107 )

09 12, 2004

select CONVERT(varchar(12) , getdate(), 108 )

11:06:08

select CONVERT(varchar(12) , getdate(), 109 )

09 12 2004 1

select CONVERT(varchar(12) , getdate(), 110 )

09-12-2004

select CONVERT(varchar(12) , getdate(), 113 )

12 09 2004 1

select CONVERT(varchar(12) , getdate(), 114 )

11:06:08.177

WPF调用Winform控件

WPF调用Winform控件实现主要分三步:

WPF调用Winform控件

1、添加两个引用:

WindowsFormsIntegration(负责整合WPF和Windows)
System.Windows.Forms

2、在 XAML文件中添加两个引用:

阅读更多

EntityFramework学习——模型概述与环境搭建

1.Entity Framework简介

Entity Framework的全称是ADO.NET Entity Framework,是微软开发的基于ADO.NET的ORM(Object/Relational Mapping)框架。早期被称为 ObjectSpace。它以新实体框架为特色。使得开发人员可以通过对象模型(而不是逻辑/关系数据模型)专注于数据。实体框架有助于将逻辑数据架构抽象为概念模型,并且允许以多种方式通过对象服务和名为“EntityClient”的新数据提供程序与概念模型交互。EntityFramework的主要特点:

  1. 支持多种数据库(Microsoft SQL Server, Oracle, and DB2);
  2. 强劲的映射引擎,能很好地支持存储过程;
  3. 提供Visual Studio集成工具,进行可视化操作;
  4. 能够与ASP.NET, WPF, WCF, WCF Data Services进行很好的集成。

EF使用概念层(ConceptualModels)、映射层(Mappings)和逻辑层(StorageModels)将逻辑数据库结构抽象化。使开发人员可以编写更少的数据访问代码,减少维护,将数据结构抽象化为更易于开展业务(标准化程度较低)的方式,并且有利于数据的持久性。同时这三层也是EF的核心——EDM(实体数据集)。

阅读更多

C#调用C DLL时 关于参数为char *类型的转换

如果DLL接口的输入参数为char**,也就是字符数组的数组(即字符串数组),此时在C#声明中不能直接传递string[],传递的应该是通过Encoding类对这个string[]进行编码后得到的一个char[]。

如果DLL接口的输出参数为char**,也就是字符数组的数组(即字符串数组),此时在C#声明中应该使用byte[]来做参数。然后通过Encoding类对这个byte[]进行解码,得到字符串。如下例所示:

C++ DLL接口:

1
2
3
4
5
6
7
long _stdcall USE_GetAgentGroupInfoEx(
/* [in] */ char** AgentID,
/* [in] */ long ArraySize,
/* [out] */ char** AgentName,
/* [out] */ long AgentStatus[],
/* [out] */ char** AgentDN,
/* [out] */ char** AgentIP);

C#中的声明

阅读更多

vs2008打开vs2010工程项目

由于软件的向下兼容,vs2010可以打开vs2008项目,但是vs2008打开vs2010时会出现一些错误提示。解决办法如下:

1.替换VS2010项目中SLN文件的

Microsoft Visual Studio Solution File, Format Version 11.00

# Visual Studio 2010

阅读更多