エンティティフレームワーク6.0.0.0を使用しています.3カラムを返すSQL関数を持っています 2 guidと1つのvarchar(userid、ticketid 、数)。 ADO.netコンポーネントを使用せずにこのカスタムSQL関数を呼び出す方法 エンティティフレームワークを使用しています(コードの最初のアプローチ)。エンティティフレームワークを使用してSqlユーザ定義関数を呼び出す方法LInqを使用して最初にアプローチするコード#
答えて
私は同じものを持っていました:DbContextから派生したクラスで、いくつかのDbSetプロパティと1つのストアドプロシージャがあります。ストアドプロシージャは、(移行の場合に必要)ストアドプロシージャを作成または変更
- チェック:私は3つの機能を追加しました。
あなたの質問は最後の部分です。また、三つの機能
public class InvoiceContext : DbContext
{
// DbSet properties left out
#region stored procedures
private const string StoredProcedureNameProcessUsageCosts = "processusagecosts";
public void CallStoredProcedureProcessUsageCosts(UsageCosts usageCosts)
{
object[] functionParameters = new object[]
{
new SqlParameter(@"ReportDate", usageCosts.ReportPeriod),
new SqlParameter(@"CustomerContractId", usageCosts.CustomerContractId),
new SqlParameter(@"CallType", usageCosts.CallType),
new SqlParameter(@"TariffGroup", usageCosts.TariffGroup),
new SqlParameter(@"VatValue", usageCosts.VatValue),
new SqlParameter(@"PurchaseCosts", usageCosts.PurchaseCosts),
new SqlParameter(@"RetailCosts", usageCosts.RetailCosts),
};
const string sqlCommand = @"Exec " + StoredProcedureNameProcessUsageCosts
+ " @ReportDate, @CustomerContractId, @CallType, @TariffGroup, @VatValue,"
+ " @PurchaseCosts, @RetailCosts";
this.Database.ExecuteSqlCommand(sqlCommand, functionParameters);
}
public bool StoredProcedureProcessUsageCostsExists()
{
return this.Exists(StoredProcedureNameProcessUsageCosts);
}
public void CreateProcedureProcessUsageCosts(bool forceRecreate)
{
bool storedProcedureExists = this.Exists (StoredProcedureNameUpdateUsageCosts);
// only create (or update) if not exists or if forceRecreate:
if (!storedProcedureExists || forceRecreate)
{ // create or alter:
var x = new StringBuilder();
// ALTER or CREATE?
if (!storedProcedureExists)
{
x.Append(@"CREATE");
}
else
{
x.Append(@"ALTER");
}
// procedure name:
x.Append(@" procedure ");
x.AppendLine(StoredProcedureNameProcessUsageCosts);
// parameters:
x.AppendLine(@"@ReportPeriod int,");
x.AppendLine(@"@CustomerContractId bigint,");
x.AppendLine(@"@CallType nvarChar(80),");
x.AppendLine(@"@TariffGroup nvarChar(80),");
x.AppendLine(@"@VatValue decimal(18, 2),");
x.AppendLine(@"@PurchaseCosts decimal(18, 2),");
x.AppendLine(@"@RetailCosts decimal(18, 2)");
// code
x.AppendLine(@"as");
x.AppendLine(@"begin");
x.AppendLine(@"Merge [usagecosts]");
x.AppendLine(@"Using (Select @ReportPeriod as reportperiod,");
x.AppendLine(@" @CustomerContractId as customercontractId,");
x.AppendLine(@" @CallType as calltype,");
x.AppendLine(@" @TariffGroup as tariffgroup,");
x.AppendLine(@" @VatValue as vatvalue)");
x.AppendLine(@" As tmp ");
x.AppendLine(@"On ([usagecosts].[reportperiod] = tmp.reportperiod");
x.AppendLine(@"AND [usagecosts].[customercontractId] = tmp.customercontractid");
x.AppendLine(@"AND [usagecosts].[calltype] = tmp.calltype");
x.AppendLine(@"AND [usagecosts].[tariffgroup] = tmp.tariffgroup");
x.AppendLine(@"AND [usagecosts].[vatvalue] = tmp.Vatvalue)");
x.AppendLine(@"When Matched Then ");
x.AppendLine(@" Update Set [usagecosts].[purchasecosts] = [usagecosts].[purchasecosts] + @purchasecosts,");
x.AppendLine(@" [usagecosts].[retailcosts] = [usagecosts].[retailcosts] + @retailcosts");
x.AppendLine(@"When Not Matched Then");
x.AppendLine(@" Insert (ReportPeriod, CustomerContractId, calltype, tariffgroup, vatvalue, purchasecosts, retailcosts)");
x.AppendLine(@" Values (@reportPeriod, @CustomerContractId, @CallType, @TariffGroup, @VatValue, @PurchaseCosts, @RetailCosts);");
x.AppendLine(@"end");
this.Database.ExecuteSqlCommand(x.ToString());
}
// else: procedure exists and no forced recreate, nothing to do
}
#endregion stored procedures
}
使用されているので、ここでは、他のものをお勧めします:
using (var dbContext - new InvoiceContext(...)) { UsageCosts params = new UsageCosts() { ... }; dbContext.CallStoredProcedureUsageCost(params); }
ストアドプロシージャを呼び出すストアドプロシージャ
を作成します。最初の播種中にInitializeDataBaseでこれを行う[LINQクエリでSQLユーザー定義関数を呼び出す]の可能複製(http://stackoverflow.com/questions - データベースF、またはマイグレーション機能
public override void InitializeDatabase(InvoiceContext context)
{
// if not exists, create the stored procedure
context.CreateProcedureProcessUsageCosts(false);
}
答えをありがとう。私の問題は、そのユーザー定義のSQL関数を呼び出すSPを作成し、C#のコードを使用してそのSPを呼び出すことによって..しかし、私が知りたいのは、エンティティフレームワーク(バージョンを使用してdatatbaseに存在するUserdefined関数6.0.0.0)c#code ... – user3811011
EntityFrameworkを使用してデータベースに常駐するユーザー定義関数を呼び出すエレガントな方法があります。上で示したように、これはDbContext.Databaseを介してアクセス可能なSystem.Data.Entity.Database.ExecuteSqlCommand関数です –
- 1. エンティティフレームワークにSQLユーザ定義関数を追加する方法は?
- 2. jQueryはユーザ定義関数を呼び出して呼び出します
- 3. init_segを使用して初期化関数を呼び出す
- 4. AJAXを使用してPHP関数を呼び出す方法
- 5. デフォルトを使用して関数を呼び出す方法
- 6. JSPでユーザ定義関数を記述して呼び出す方法は?
- 7. if文からユーザ定義関数を呼び出す方法
- 8. ラムダ.NETでユーザ定義関数を呼び出す方法
- 9. SQLを使用して配列を引数として持つpl/SQL関数を呼び出す方法
- 10. Jenkinsfileで関数を定義して呼び出す方法は?
- 11. Spacemacsで関数を定義して呼び出す方法は?
- 12. リファレンスラムダ関数を使用して関数を呼び出す方法は?
- 13. Pythin lmfit library:最小化関数を使用して関数呼び出しの数を制限する方法
- 14. ポリモフィズム引数を使用して動的に関数を呼び出す方法
- 15. SQLを使用してWSを呼び出す最良の方法
- 16. kernel32.dll関数を呼び出す方法C++でLoadLibrary(..)を使用してGetTickCount()を呼び出す方法
- 17. SQLでグローバル変数を定義して使用する方法
- 18. 関数を使用して、呼び出し可能なオブジェクトを引数として定義します。
- 19. C++でユーザ定義コードを呼び出す方法
- 20. jquery変数を使用して関数を呼び出す
- 21. AJAXを使用して複数の関数を呼び出す方法
- 22. ajaxを使用して複数のPHP関数を呼び出す方法、ベストプラクティス?
- 23. エンティティフレームワークでSQLユーザー定義型を使用する方法6
- 24. EntityFrameを使用した関数の呼び出しC#のデータベースの最初のアプローチ
- 25. ADOを使用してC++からユーザー定義関数を呼び出す方法
- 26. fortranでwriteステートメントを使用して別の自己定義関数を呼び出す方法は?
- 27. 反応を使用して外部で定義されたjavascript関数を呼び出す方法は?
- 28. serverless-step-functionsプラグインの定義を使用してAWSステップ関数を呼び出す方法は?
- 29. 呼び出す方法 - 変数を使用して関数またはスクリプトを呼び出す式?
- 30. 関数呼び出しで "変数"として指定されている値を使用する方法
を私が間違えていないよ場合のいずれかで、/20131632/call-a-sql-user-defined-function-in-a-linq-query) –
これはもっと近いかもしれません:[Entity Framework 6 Code First Custom Functions](http://stackoverflow.com/q/29517627/6400526) –
答えてくれてありがとうございます。しかし、私は現在、そのユーザー定義のSQL関数を呼び出すSPを作成し、C#コードを使用してそのSPを呼び出すことで私の問題を解決します。しかし、私が知りたいのは、エンティティフレームワーク(バージョン6.0.0.0)を使用してデータベースに存在するユーザ定義関数C#コード... – user3811011