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

阅读更多

WPF将控件转化为图像

在项目中需要将datagrid这个控件转化成图像输出,思考了几种办法:

1.可以对屏幕截取,然后再根据控件相对于屏幕的坐标再次截取,即可取得控件截图。这种方法限制性很大,如图像的分辨率被限死,同时,如果控件不在屏幕中显示的话那么就无法进行截图。

2.查看datagrid源码,重新绘制图形。这个办法只要掌握,其实一劳永逸。只不过需要时间过长,略显复杂,项目中需要一种简洁的方法来操作。

3.有自带方法绘制控件。经过查阅资料,整理代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/// <summary>
/// 可以对WPF中的控件抓取为图片形式.
/// </summary>
/// <param name="p_FrameworkElement">控件对象</param>
/// <param name="p_FileName">生成图片的路径</param>
private void SaveToImage(FrameworkElement p_FrameworkElement, string p_FileName)
{
System.IO.FileStream fs = new System.IO.FileStream(p_FileName, System.IO.FileMode.Create);
RenderTargetBitmap bmp = new RenderTargetBitmap((int)p_FrameworkElement.ActualWidth, (int)p_FrameworkElement.ActualHeight, 96.0, 96.0, PixelFormats.Pbgra32);
bmp.Render(p_FrameworkElement);
BitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bmp));
encoder.Save(fs);
fs.Close();
fs.Dispose();
}
阅读更多

win7管理与office2010两个问题

1.win7下右键计算机,点击管理,会发现不能打开,这会给配置服务等一些操作带来麻烦,解决这个问题只需要添加注册表信息:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESOFTWAREClassesCLSID{20D04FE0-3AEA-1069-A2D8-08002B30309D}shellManagecommand]
@=hex(2):6d,00,6d,00,63,00,2e,00,65,00,78,00,65,00,20,00,25,00,25,00,73,00,79,
00,73,00,74,00,65,00,6d,00,72,00,6f,00,6f,00,74,00,25,00,25,00,5c,00,53,00,
59,00,53,00,54,00,45,00,4d,00,33,00,32,00,5c,00,63,00,6f,00,6d,00,70,00,6d,
00,67,00,6d,00,74,00,2e,00,6d,00,73,00,63,00,00,00

将其保存为reg格式,导入即可。

2.安装Office2010后有时会发现每次打开word等应用都会要求配置,需要等待很长时间,重新安装也不能解决,这时候只需要运行:

reg add HKCUSoftwareMicrosoftOffice14.0WordOptions /v NoReReg /t REG_DWORD /d 1
阅读更多

c#约瑟夫环

约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。

例如:

n = 9, k = 1, m = 5

【解答】

出局人的顺序为5, 1, 7, 4, 3, 6, 9, 2, 8。

阅读更多

C#窗体间传值

关于C#窗体间的数据传值的方法好几种,在项目中都各有应用,虽然简单,这里记录下来,分享给大家!

一、使用带参数的构造函数

主窗体

1
2
3
4
5
6
private void button_Click(object sender, System.EventArgs e)
{
// 将主窗体的控件值作为参数传递到子窗体
Form2 formChild = new Form2(this.textBoxFrm1.Text, this.checkBoxFrm1.Checked);
formChild.ShowDialog();
}

子窗体(Form2)

阅读更多

Asp.net笔记(2)

  1. Aspx中使用cs中的函数及成员时需要注意该函数类型为protected或者public

  2. Asp.net的服务端控件和客户端控件ID不见得一样。服务端控件在内网环境和后台环境下使用是很方便的。而HTML控件用于前台。物尽其用。

  3. 获取客户端控件ID方法: 服务端id.ClientID

    document.getElementById(‘<%=TextBox1.ClientID%>’)

    JQuery同理。

  4. Aspx中asp标签的控件的css样式:CssClass=”…”,等同于HTML中class属性。也可以单独修改控件样式,但不建议这样做。会生成大量冗余代码。

  5. 控件的Attributes用于设置控件的额外属性。

  6. Label渲染成Span,若设置了AssociateControlID属性,就渲染成label,且for属性为关联的控件id。

  7. Literal不做任何渲染,就是文本。将其mode属性设置为encode后,可以自动对文本进行编码,防止xss漏洞。

  8. TextBox控件的AutoPostBack属性为true时,当该控件失去焦点,就自动Post。ASP.net中要提交表单时最好使用_doPostBack()方法。

  9. RadioButton渲染为 input type=”radio”, 通过GroupName进行分组。

  10. Button等控件可以通过Command以及CommandName,CommandArgument来统一处理。

  11. Panel是容器,如果GroupingText的属性设置了,就渲染成有filedset的div,否则直接为div

  12. HyperLink,能将虚拟路径转化为客户端路径。

  13. FileUpload控件使用说明:需要增加上传文件的类型及权限。防止恶意攻击。

  14. Jquery使用注意:$(“#<%=TextBox1.ClientID%>”).val() 只有<%%>里的是服务端代码。

  15. 控件的display:none和visibility:hidden都能实现隐藏,区别是:display:none不占空间

  16. 页面中的IsValid属性用来判断所有验证控件是否验证完成

  17. 控件的CausesVilidation属性为false则该控件不能被验证控件验证。

Asp.net笔记(1)

  1. Get和post区别
  • Get通过url显式传递参数,参数传递长度有限

  • Post隐式传递,可以传递数据量较大的数据

  1. 表单只可提交有name 的input 、select、textarea的value。对于不能提交value的,例如div。可以用hidden类型的input代替传送。这就是ASP.NET的viewstate机制的由来。

  2. 大量的数据不能存储在hidden或者viewstate中,会增加上传流量,导致网页速度变慢。同时表单中不能存储机密数据,会造成数据欺骗。

  3. 后台变量不能保存B端的值,对此引用session机制与cookie。Session是B端用户相关信息与S端内存的对应关系。Cookie将这些信息数据保存在本地。Session中不能存储过大的数据,并且超过一段时间会自动清除。例如在线编辑文章,编辑时间过长导致提交时出现文章提交失败,超时或者丢失。优化网页案例:网站主站域名与音乐站,图像站等大流量子站域名区分开,防止cookie的大量提交更新。

  4. 每一个请求都会new一个实现了IHttpHandler接口的类的实例进行处理,用完后就GC,不会保留。

  5. JS作为客户端校验能方便用户,但js被禁用后会引起不必要的麻烦,所以数据限制等功能还要在服务端做处理。

  6. asp:Button标签中 OnClientClick为客户端点击事件,onclick是服务端点击事件。

  7. VirtrualPathUtility虚拟路径方法:

  • ToAbsolute(“/ex.aspx”) 将虚拟路径/ex.aspx转换为绝对路径

  • AppendTrailingSlash(“”) 判断虚拟路径最后是否有/,如果没有就加上

  • Combine(“”,””) 合并两路径,需要注意路径一的末尾如果没有/就找到最后一个/处进行合并,例如Combine(“/a/b”,”c.html”)合并为/a/c.html

  1. Response对象:
阅读更多