次の この記事 Entity Framework Coreを使用して、内部SQL関数を自分のアプリケーションに呼び出しようとしていました
このように、コンテキスト内の静的メソッドを作成しました。
public class DbContext : DbContext
{
public DbContext(DbContextOptions<DbContext> options) : base(options)
{
}
[DbFunction("FN_ENCRYPT", "DBO")]
public static string FN_ENCRYPT(string ENC)
{
throw new NotImplementedException();
}
}
_
この後、私はそれを呼び出す方法について少し混乱しているので、私はこのようにして試してみました(もちろん静的メソッドなのでとう)。
public string Encript(string Word)
{
return DbContext.FN_ENCRYPT(Word);
}
_
しかし、何を推測しますか?私は「いい」NotimplementedExceptionを受け取りました:)
誰かが私を助けますか?
前もって感謝します
呼び出し自体を使用すると、実際にC#コードを実行するため、例外がスローされます。例外をスローすることを推奨する理由は、不注意による使用を避けるため、すなわち直接呼び出すことによってこれを正確に推奨します。そのシグニチャは,与えられたLINQプロバイダで解釈され、適切なSQLステートメントに変換されます。
それらはLINQクエリで使用され、SQLに翻訳されることができます
これが仕事のデモです。
モデルとDBContext
public class Employee
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime DOB { get; set; }
}
public class MyDbContext:DbContext
{
public MyDbContext(DbContextOptions<MyDbContext> options):base(options)
{ }
public DbSet<Employee> Employees { get; set; }
[DbFunction("CalculateAge", "dbo")]
public static int CalculateAge(DateTime dob)
{
throw new NotImplementedException();
}
}
_
そして使いやすいです
public IActionResult GetAge(int employeeId)
{
var query = _context.Employees
.Where(x => x.Id == employeeId)
.Select(d =>new
{
Name=d.Name,
DOB=d.DOB,
Age= MyDbContext.CalculateAge(d.DOB)
}).ToList();
return Json(query);
}
_
結果