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 等等