DbContextより、SQL文を直接実行する。
DbContextにSQL文を実行する。
MVC5以降(?)
int cnt = dbcontext.Database.ExecuteSqlCommand("delete tablename where id ={0}",id); int cnt = dbcontext.Database.ExecuteSqlCommand("delete tablename where id =@p0",new object[] { id });
1行も文字列を返す
public string getClm1(DbContext context) { string sql = "select clm1 from tablename"; var result = context.Database.SqlQuery<string>(sql); if (result != null) return result.toString(); else return string.Empty; }
Entityを返す。
public List<Table1Model> getTable1(DbContext context) { string sql = "select * from table1"; var result = context.Database.SqlQuery<Table1Model>(sql); if (result != null) return result.toList(); else return null;
SQL文を直接書いてEntityモデルに返す場合の注意点
※基本、DbContextにより取得される場合、ColumnAttributeが設定されていれば、Property名が違っても正しくマッピングしてくれるが、SQL文の場合、Property名のみを認識するため、一致するカラム名がないとエラーになる。
※EntityモデルはEntityモデルであるとのこと、Keyがなかったり、おかしなところがあれば、Runtime errorになってしまう。
なんとも思うようにもならないのね。
DataTableにデータを取得する
DbProviderFactory factory = DbProviderFactories.GetFactory(_context.Database.Connection); using (var cmd = factory.CreateCommand()) { cmd.CommandText = sqlQuery; cmd.CommandType = CommandType.Text; cmd.Connection = _context.Database.Connection; using (var adapter = factory.CreateDataAdapter()) { adapter.SelectCommand = cmd; DataTable tb = new DataTable(); adapter.Fill(tb); return tb; } }