标签:
Entity Framework中对实体的特性声明有着严格的要求
1.实体必须要有主键特性,但是如果实体没有主键特性那怎么办?
public int ExecuteSqlCommand(string sql, params SqlParameter[] paras) { if (this.IsTransaction) { if (dbContext.Database.CurrentTransaction == null) { dbContext.Database.BeginTransaction(); } } return dbContext.Database.ExecuteSqlCommand(sql, paras); }
只能采用执行comand来折中解决,为什么引入了事务机制?因为我们在执行一个事务操作时候,很可能会 DbSet<T>的增删改操作和command操作混用,但是为了满足事务的要求,所以引入DbContextTransaction
2.实体必须表名特性,主键特性
[Table("Shop")] public class Shop { [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.None)] public int? ShopID { get; set; } public string Name { get; set; }
DatabaseGeneratedAttribute(DatabaseGeneratedOption.None)表示非自增的主键列
3.实体不需要映射的时候,声明特性
[NotMapped] public string ShopName { get; set; } [NotMapped] public List<S_Roles> RolesList { get; set; }
注意NotMapped会使增删改查的语句忽略掉改字段,但是也会是下面方法失效,也就是声明了NotMapped特性的字段,实体的值反射不出来了
public IEnumerable<T> GetList<T>(string strsql) { return dbContext.Database.SqlQuery<T>(strsql).ToList(); }
4.实体类型必须要和数据表字段类型一致
比如tinyint 类型要对应byte 等等
标签:
原文地址:http://www.cnblogs.com/njcxwz/p/5581340.html