一对多关系
项目中最常用到的就是一对多关系了。Code First对一对多关系也有着很好的支持。很多情况下我们都不需要特意的去配置,Code First就能通过一些引用属性、导航属性等检测到模型之间的关系,自动为我们生成外键。观察下面的类:
{
public int DestinationId { get; set; }
public string Name { get; set; }
public string Country { get; set; }
public string Description { get; set; }
public byte[] Photo { get; set; }
public List<Lodging> Lodgings { get; set; }
}
public class Lodging
{
public int LodgingId { get; set; }
public string Name { get; set; }
public string Owner { get; set; }
public bool IsResort { get; set; }
public decimal MilesFromNearestAirport { get; set; }
public Destination Destination { get; set; }
}
Code First观察到Lodging类中有一个对Destination的引用属性,同时Destination中又有一个集合导航属性Lodgings,因此推测出Destination与Lodging的关系是一对多关系,所以在生成的数据库中为自动为Lodging表生成外键:
其实,只要在一个类中存在引用属性,即:
{
public int DestinationId { get; set; }
public string Name { get; set; }
public string Country { get; set; }
public string Description { get; set; }
public byte[] Photo { get; set; }
}
public class Lodging
{
public int LodgingId { get; set; }
public string Name { get; set; }
public string Owner { get; set; }
public bool IsResort { get; set; }
public decimal MilesFromNearestAirport { get; set; }
public Destination Destination { get; set; }
}
或一另一个类中存在导航属性:
{
public int DestinationId { get; set; }
public string Name { get; set; }
public string Country { get; set; }
public string Description { get; set; }
public byte[] Photo { get; set; }
public List<Lodging> Lodgings { get; set; }
}
public class Lodging
{
public int LodgingId { get; set; }
public string Name { get; set; }
1.导出为cvs
先获取表格的头,这个header不管你是固定还是动态,每个字段后面加一个",",用来表示一列;到最后换行时加Environment.NewLine;例如:
ArrayList list = new ArrayList();
list.Add("xxx");
list.Add("xx");
list.Add("xx");
list.Add("xx");
list.Add("xxx");
list.Add("xx");
list.Add("xx");
list.Add("xx");
list.Add("xxxx");
string[] saleHeaders = (string[])list.ToArray(typeof(string));
temp = saleWriteOffHtmlStr(saleDt, saleHeaders);
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(temp.ToString());
byte[] outBuffer = new byte[buffer.Length + 3];
outBuffer[0] = (byte)0xEF;
outBuffer[1] = (byte)0xBB;
outBuffer[2] = (byte)0xBF;
Array.Copy(buffer, 0, outBuffer, 3, buffer.Length);
Response.Write(Encoding.UTF8.GetString(outBuffer));
Response.Buffer = true;
Response.AddHeader("Content-Disposition", "attachment;filename=" + Server.UrlEncode("销售数据") + ".csv;");
Response.Charset = "utf-8";
Response.ContentType = "text/csv";
public string saleWriteOffHtmlStr(DataTable dt, string[] headers)
{
string htmlstr = "";
foreach (string s in headers)
{
htmlstr += s.ToString().Replace(',', ',') + ",";
}
htmlstr = htmlstr.Substring(0,htmlstr.Length-1) + Environment.NewLine;
foreach (DataRow dr in dt.Rows)
{
htmlstr += dr["Base_tabletNumber"].ToString().Replace(',', ',') + ",";
.......
htmlstr += Environment.NewLine;
}
return htmlstr;
}
2.导出为xls
resp = Page.Response;
resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
resp.AppendHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode("销售表", System.Text.Encoding.UTF8) + ".xls;");
resp.Write(temp);
temp = "";
resp.End();
public string saleWriteOffHtmlStr(DataTable dt, string[] headers)
{
string htmlstr = "";
foreach (string s in headers)
{
htmlstr += s.ToString().Replace(',', ',') + "\t";
}
htmlstr = htmlstr.Substring(0
1.MVC模式是一种软件架构模式。它把软件系统分为三个部分:模型(Model),视图(View)和控制器(Controller)。
1. 当第一个请求从客户端发起的时候,首先执行的是Global.asax中的Application_Start()方法来完成一些初始化工作,其中重要的一步是RegisterRoutes方法,这个方法指定了如何将url映射到具体的方法上,稍后详解。
2. 根据第一步中指定的映射表生成一个RouteDate个对象,利用这个对象来创建一个RequestContext对象。
3. MvcRouteHandler创建一个MvcHandler,并将RequestContext对象传给MvcHandler。
4. MvcHandler对象利用RequestContext对象确定一个IControllerFactory对象来创建Controller对象。
5. MvcHandler对象调用Controller对象的Execute()方法。
6. Controller的ControolerActionInvoker对象决定调用controller的哪个具体的action方法。
7. Action方法接受用户参数,执行方法,返回一个Result类型的对象。
4.Razor引擎是MVC3新加入的引擎,ViewBag是一个dynamic类型的对象,可以用来在controller和页面之间传递数据。
5.MVC M中验证:
本文链接