如何使用vscocam在vs使用petapoco

其他回答(6)
项目使用:&PetaPoco 非常好用, 可配合代码生成工具一起
收获园豆:4
框架名称:LINQ to SQL
用的最爽的功能:官方ORM,不懂的时候,一GOOGLE一大片。
用的感觉别扭的地方: 只支持SQL SERVER,需要多数据库支持的请绕道。
收获园豆:10
园豆:12719
收获园豆:2
园豆:6880
园豆:12719
园豆:6880
园豆:6880
园豆:6880
我觉得吧,看你的业务需求。L2S简单,直接,复杂查询有难度,单表维护快捷。Dapper高性能,代码量较大,需要熟悉SQL。其他都差不多,要么面向对象多点,那么面向sql就少点,反之亦然。
收获园豆:5
园豆:18314
园豆:18314
用iBATIS.Net吧,这个sql可以跟业务分离。dapper也快,但是sql嵌入到业务中。
收获园豆:4
园豆:8688
小项目可以用Dapper,使用简单
收获园豆:5
园豆:4004
&&&您需要以后才能回答,未注册用户请先。  虽然 Entity Framework (EF) 5 承诺带来了超越 EF 4 的,但为了更有效地使用 ORM,我们仍然需要关注一些注意事项&&即视图生成、缓存、自动编译的查询、查询执行选项及设计时(Design Time)。
  微软已经发布了一份,概述使用待发布的 Entity Framework 5(它将作为即将到来的 .NET 4.5 的一部分发布)时应关注的各种性能注意事项。
  以下是一些需要注意的地方:
冷查询执行 vs. 暖查询执行(Cold-vs-Warm query execution)&&视图生成这一步(用于从数据库模式到概念模式或从概念模式到数据模式的必要转换)会增加第一次运行查询时的开销,后续运行会因为视图缓存的缘故会更快一些。用户可以通过;
缓存&&在对象层次(特别是结合禁用 AutoDetectChanges 改善 DbContext Find ()性能),可用的缓存有查询计划缓存(Query Plan Caching)、元数据缓存(MetaData Caching)及结果缓存(Results Caching)。EF 仍然没有提供二级缓存,不过我们可以参考一些指南进行实现&&如 ,以及 Julia Lerman 的文章&&;
可选的无跟踪查询(没有状态跟踪的开销)。目前该选项只对 ObjectQuery 可用,没法适用于 DbSet 及 DbQuery 类;
微型 ORM 风格的快速查询,如以及 &;
设计时注意事项&&每个层次对应一张表(Table-per-hierarchy,简称 TPH)vs. 每个类型对应一张表(Table-per-Type,简称 TPT)vs. 每个类对应一张表(Table-per-Class,简称 TPC);其中 TPT 在查询复杂度及性能方面表现最差;
延迟加载 vs. 预先加载 (Lazy-vs-Eager loading)。
   是由微软提供的一款面向 .NET 应用程序的商业。除了 EF 之外,.NET 开发人员还可以选择的一些(开源和商业包括在内)产品有
和 。另外,还有一些轻量级的微型 ORM 模型像 、 及 。
  查看英文原文:mono for android中使用dapper或petapoco对sqlite进行数据操作 - 寒殇 - 博客园
在mono for android中使用dapper或petapoco,很简单,新建android 类库项目,直接把原来的文件复制过来,对Connection连接报错部分进行注释和修改就可以运行了.(用可移植类库PCL项目也可以的.) 如果需要源码可以联系我.10元收费哈.. & 以下内容包括 1.在安卓中创建sqlite数据库; 2.检查数据库是否存在; 3.返回数据库路径; 4.插入数据(前置知识,dapper的使用方法或petapoco的); 5.查询数据; 本人小菜鸟一枚,以下代码写得很烂,希望有好的想法可以指点下我. & 知识点提示 1.安卓sqlite数据提交,默认每一次都是事务提交,所以如果不采用一次性全部事务提交,会造成很多事务的建立.也就是把提交部分,用一个事务包起来,不要不用事务.否则很慢. using S
using System.Collections.G
using System.L
using System.T
using Android.A
using Android.C
using Android.OS;
using Android.R
using Android.V
using Android.W
using System.IO;
using Mono.Data.S
using System.D
using Android.U
using Microsoft.CS
using Mono.CS
using BaseM
using PetaPocoForM
namespace monoandroid1.Controllers
[Activity(Label = "启动页", MainLauncher = true, Icon = "@drawable/icon")]
public class Start : Activity
private TextV
private EditT
protected override void OnCreate(Bundle bundle)
base.OnCreate(bundle);
// Create your application here
SetContentView(Resource.Layout.Main);
tips = FindViewById&TextView&(Resource.Id.Results);
Button BtCreatDatabase = FindViewById&Button&(Resource.Id.CreatDatabase);
BtCreatDatabase.Click += new EventHandler(CreatDatabase);
Button BtImportData = FindViewById&Button&(Resource.Id.ImportData);
BtImportData.Click += delegate { ImportData(); };
Button BtDataDisplay = FindViewById&Button&(Resource.Id.DataDisplay);
BtDataDisplay.Click += delegate
keyword = FindViewById&EditText&(Resource.Id.Input);
tips.Text = DataDisplay(keyword.Text) == null ? "查询不到" : DataDisplay(keyword.Text).UserN
Button BtCheckDatabase = FindViewById&Button&(Resource.Id.CheckDatabase);
BtCheckDatabase.Click += delegate
CheckDatabase("/data/data/monoandroid1.monoandroid1/files/UserData.db3");
/// &summary&
/// 创建数据库
/// &/summary&
/// &param name="sender"&&/param&
/// &param name="e"&&/param&
protected void CreatDatabase(object sender, EventArgs e)
string databaseName = "UserData.db3";
string dbFilePath = GetDatabaseFilePath(databaseName);
bool existsDB = CheckDatabase(dbFilePath);
if (existsDB == true)
SqliteConnection.CreateFile(dbFilePath);
var conn = new SqliteConnection("Data Source=" + dbFilePath);
var commands = new[]
"drop table if exists dog",
"create table if not exists dog (UserId integer primary key autoincrement, UserName varchar(20),Age int,Address varchar(50))",
if (conn.State == ConnectionState.Broken)
conn.Close();
if (conn.State == ConnectionState.Closed)
conn.Open();
foreach (string cmd in commands)
using (SqliteCommand sqlitecmd = conn.CreateCommand())
sqlitecmd.Connection =
mandText =
mandType = CommandType.T
//conn.Open();
sqlitecmd.ExecuteNonQuery();
//conn.Close();
tips.Text = "数据库创建成功";
catch (System.Exception sysExc)
tips.Text = "Exception: " + sysExc.M
if (conn.State != ConnectionState.Closed)
conn.Close();
conn.Dispose();
/// &summary&
/// 返回数据库完整路径
/// &/summary&
/// &param name="databaseName"&数据库名&/param&
/// &returns&返回数据库完整路径&/returns&
private string GetDatabaseFilePath(string databaseName)
string documents = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
string dbFilePath = bine(documents, databaseName);
return dbFileP
/// &summary&
/// 检查数据库是否存在
/// &/summary&
/// &param name="dbFilePath"&&/param&
/// &returns&true不存在,false已经存在&/returns&
private bool CheckDatabase(string dbFilePath)
bool exists = File.Exists(dbFilePath);
if (!exists)
//SqliteConnection.CreateFile(dbFilePath);
tips.Text = "数据库不存在";
("CreateFile", "路径不存在数据库,并创建数据库");
return true;
tips.Text = "数据库已经存在";
("CreatFile", "已经存在数据库,放弃创建");
return false;
private SqliteConnection OpenDatabase()
string databaseName = "UserData.db3";
string dbFilePath = GetDatabaseFilePath(databaseName);
//&add name="ConnectionStringName" connectionString="sever=服务器名;database=数据库名;User ID=用户;Password=密码"
providerName="System.Data.SqlClient" /&
//&add name="ConnectionStringName" connectionString="Data Source=服务器名;Initial Catalog=数据库名;User ID=用户;Password=密码"
providerName="System.Data.SqlClient" /&
string connectionstr = "Data Source=" + dbFileP
SqliteConnection connection = new SqliteConnection(connectionstr);
if (connection.State == ConnectionState.Broken)
connection.Close();
if (connection.State == ConnectionState.Closed)
connection.Open();
/// &summary&
/// 导入数据
/// &/summary&
protected void ImportData()
//dapper版
List&Dog& Dogs = new List&Dog&();
for (int i = 0; i & 100000; i++)
Dogs.Add(new Dog { UserId = i, UserName = "DogName" + i.ToString(), Age = i, Address = "ADD" + i.ToString()
string sql ="INSERT INTO dog (UserId,UserName,Age,Address) VALUES (@UserId,@UserName,@Age,@Address)";
using (SqliteConnection connection = OpenDatabase())
//SqlConnection connection = GetOpenConnection(sqlconnectionString);
//插入100000条数据到数据库
DateTime starttime = DateTime.N
int records = 0;
using (var trans = connection.BeginTransaction())
records += connection.Execute(sql, Dogs, trans, 30, CommandType.Text);
for (int i = 0; i & 100000; i++)
connection.Execute("INSERT INTO dog (UserId,UserName,Age,Address) VALUES (@UserId,@UserName,@Age,@Address)",
new { );//System.Guid.NewGuid().ToString()全球唯一标识符 (GUID) 是一个字母数字标识符,用于指示产品的唯一性安装。
catch (DataException ex)
trans.Rollback();
timespan = DateTime.Now.Subtract(starttime);//获取就是开始时间很结束时间差
if (connection.State != ConnectionState.Closed)
connection.Close();
connection.Dispose();
tips.Text = "数据导入完成" + timespan.ToString();
//petapoco版
//var db = new PetaPocoForMobile.Database(OpenDatabase());
//SqliteConnection connection = OpenDatabase()
using (SqliteConnection connection = OpenDatabase())
int records = <span style="color: #;
using (var db = new PetaPocoForMobile.Database(connection))
List&Dog& Dogs = new List&Dog&();
for (int i = <span style="color: #; i & <span style="color: #000; i++)
Dogs.Add(new Dog { UserId = i, UserName = "DogName" + i.ToString(), Age = i, Address = "ADD" + i.ToString() });
DateTime starttime = DateTime.N
using (var ts = db.GetTransaction())
//插入100000条数据到数据库
foreach (Dog item in Dogs)
db.Insert("dog", "UserId", item);//速度稍微慢点点,没多少差别
//db.Execute("INSERT INTO dog (UserId,UserName,Age,Address) VALUES (@0,@1,@2,@3)", item.UserId, item.UserName, item.Age, item.Address);
ts.Complete();
catch (Exception ex)
timespan = DateTime.Now.Subtract(starttime);//获取就是开始时间很结束时间差
if (connection.State != ConnectionState.Closed)
connection.Close();
connection.Dispose();
tips.Text = "数据导入完成" + timespan.ToString();
/// &summary&
/// 根据ID查询单条数据
/// &/summary&
/// &param name="keyword"&&/param&
/// &returns&&/returns&
protected Dog DataDisplay(string keyword)
SqliteConnection connection = OpenDatabase();
//获取单条记录
//var edog = connection.Query&Dog&("select * from dog where id = @Id", new { Id = 2 }).Single&Dog&();
//var edog = connection.Query&Dog&("select * from dog where UserId = @UserId", new { UserId = keyword }).SingleOrDefault&Dog&();
var edog = connection.Query&Dog&("select * from dog where UserId = @UserId", new { UserId = keyword }).SingleOrDefault&Dog&();
catch (System.Exception sysExc)
//tips.Text = "Exception: " + sysExc.M
//("e", "Exception: " + sysExc.Message);
return null;
if (connection.State != ConnectionState.Closed)
connection.Close();
connection.Dispose();Brad为我们提供了T4模板,因为公司一直在使用CodeSmith,故为其写了一个CodeSmith的模板,代码如下:
Name:EntityTemplates
Author:Qi Fei
Description:Generate a entity file in C#
&%@ CodeTemplate Language="C#" TargetLanguage="Text" Src="" Inherits="" Debug="False" Description="" ResponseEncoding="UTF-8" %&
&%@ Property Name="Namespace" Type="System.String" Default="TianChenMeiKuang.Entity" Optional="False" Category="Strings" Description="实体类命名空间" %&
&%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context" Description="源表" %&
&%@ Assembly Name="SchemaExplorer" %&
&%@ Assembly Name="System.Data" %&
&%@ Import Namespace="SchemaExplorer" %&
&%@ Import Namespace="System.Data" %&
/**********************************************************
Name:&%= GetClassName(SourceTable) %&
Date:&%=DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") %&
Description:
Modify Remark:
**********************************************************/
using WebApp.Matrix.D
namespace &%=Namespace%&
/// &summary&
/// This Entity is Mapping To [&%=SourceTable.Name%&] Table
/// Remark Ignore Attribute for the field when it is not need mapping
/// &/summary&
[Serializable]
[TableName("[&%=SourceTable.Name%&]")]
ColumnSchema primaryKeyColumn = GetPrimaryKeyColumn();
if(primaryKeyColumn != null)
if(Convert.ToBoolean(primaryKeyColumn.ExtendedProperties["CS_isIdentity"].Value)==true){ %&
[PrimaryKey("&%=primaryKeyColumn.Name%&", autoIncrement=true)]
[PrimaryKey("&%=primaryKeyColumn.Name%&", autoIncrement=false)]
public class &%= GetClassName(SourceTable) %&
&% for (int i = 0; i & SourceTable.Columns.C i++) { %&
/// &summary&
/// &%= SourceTable.Columns[i].Name %&
/// &/summary&
public &%= GetCSharpVariableType(SourceTable.Columns[i]) %& &%= GetPropertyName(SourceTable.Columns[i]) %&
&% if (i & SourceTable.Columns.Count - 1) Response.Write("\r\n"); %&
/// &summary&
/// Equals
/// &/summary&
public override bool Equals(object obj)
&%= GetClassName(SourceTable) %& other = obj as &%= GetClassName(SourceTable) %&;
if (&%=GetFirstKeyCondition()%&)
return false;
if (&%=GetTwoKeyCondition()%&)
return false;
return true;
/// &summary&
/// GetHashCode
/// &/summary&
public override int GetHashCode()
return base.GetHashCode();
&script runat="template"&
public string GetClassName(TableSchema table)
string className = table.N
return classN
public string GetPropertyName(ColumnSchema column)
string propertyName = column.N
return propertyN
public string GetFieldName(ColumnSchema column)
string propertyName = column.N
return propertyN
public ColumnSchema GetPrimaryKeyColumn()
for (int i = 0; i & SourceTable.Columns.C i++)
if(SourceTable.Columns[i].IsPrimaryKeyMember)
SourceTable.Columns[i];
return null;
public string GetKey()
for (int i = 0; i & SourceTable.Columns.C i++)
if(SourceTable.Columns[i].IsPrimaryKeyMember)
SourceTable.Columns[i].N
return "GetHashCode().ToString()";
public string GetCSharpVariableType(ColumnSchema column)
switch (column.DataType)
case DbType.AnsiString: return "string";
case DbType.AnsiStringFixedLength: return "string";
case DbType.Binary: return "Nullable&int&";
case DbType.Boolean: if(column.AllowDBNull){return "Nullable&bool&";}else{return "bool";};
case DbType.Byte: return "int";
case DbType.Currency: if(column.AllowDBNull){return "Nullable&decimal&";}else{return "decimal";};
case DbType.Date: if(column.AllowDBNull){return "Nullable&DateTime&";}else{return "DateTime";};
case DbType.DateTime: if(column.AllowDBNull){return "Nullable&DateTime&";}else{return "DateTime";};
case DbType.Decimal: if(column.AllowDBNull){return "Nullable&decimal&";}else{return "decimal";};
case DbType.Double: if(column.AllowDBNull){return "Nullable&double&";}else{return "double";};
case DbType.Guid: return "Guid";
case DbType.Int16: if(column.AllowDBNull){return "Nullable&short&";}else{return "short";};
case DbType.Int32: if(column.AllowDBNull){return "Nullable&int&";}else{return "int";};
case DbType.Int64: if(column.AllowDBNull){return "Nullable&long&";}else{return "long";};
case DbType.Object: return "object";
case DbType.SByte: if(column.AllowDBNull){return "Nullable&sbyte&";}else{return "sbyte";};
case DbType.Single: if(column.AllowDBNull){return "Nullable&float&";}else{return "float";};
case DbType.String: return "string";
case DbType.StringFixedLength: return "string";
case DbType.Time: if(column.AllowDBNull){return "Nullable&TimeSpan&";}else{return "TimeSpan";};
case DbType.UInt16: if(column.AllowDBNull){return "Nullable&ushort&";}else{return "ushort";};
case DbType.UInt32: if(column.AllowDBNull){return "Nullable&uint&";}else{return "uint";};
case DbType.UInt64: if(column.AllowDBNull){return "Nullable&ulong&";}else{return "ulong";};
case DbType.VarNumeric: if(column.AllowDBNull){return "Nullable&decimal&";}else{return "decimal";};
default:return "string";
public string GetFirstKeyCondition()
string condition = " other==null";
for (int i = 0; i & SourceTable.Columns.C i++)
var tempColumn = SourceTable.Columns[i];
if(tempColumn.IsPrimaryKeyMember)
if(((bool)tempColumn.ExtendedProperties["CS_IsIdentity"].Value))
condition += " || this." + SourceTable.Columns[i].Name + " == 0";
condition += " || other."+ SourceTable.Columns[i].Name + " == 0";
condition += " || string.IsNullOrEmpty(this." + SourceTable.Columns[i].Name + ")";
condition += " || string.IsNullOrEmpty(other."+ SourceTable.Columns[i].Name + ")";
public string GetTwoKeyCondition()
string condition = " ";
for (int i = 0; i & SourceTable.Columns.C i++)
if(SourceTable.Columns[i].IsPrimaryKeyMember)
condition += " || this."+SourceTable.Columns[i].Name +" !=other."+SourceTable.Columns[i].N
return condition.Substring(4,condition.Length-4).ToString();
public string GetHashCodeStr()
string hashCode = " ";
for (int i = 0; i & SourceTable.Columns.C i++)
if(SourceTable.Columns[i].IsPrimaryKeyMember)
hashCode += "+\"|\" +this."+SourceTable.Columns[i].Name +".ToLower()";
return hashCode.Substring(7,hashCode.Length-7).ToString();
public string GetDefaultValue(ColumnSchema column)
string DefaultValue = "";
switch(column.DataType)
case DbType.Int16:
case DbType.Int32:
case DbType.Int64:
DefaultValue = "0";
case DbType.Decimal:
DefaultValue = "0.000000M";
case DbType.AnsiString:
case DbType.String:
case DbType.StringFixedLength:
DefaultValue = "\"\"";
case DbType.Date:
case DbType.DateTime:
case DbType.DateTime2:
DefaultValue = "DateTime.Parse(\" 00:00:00\")";
case DbType.Binary:
DefaultValue = "new byte[] { }";
case DbType.Boolean:
DefaultValue = "False";
case DbType.Byte:
DefaultValue = "1";
return DefaultV
该模板只适用于但主键的环境,且主键必须为字符串类型,或者为自增长列。初步满足公司当前的需要。
阅读(...) 评论()

我要回帖

更多关于 petapoco 事务 的文章

 

随机推荐