2017-11-13 11 views
0

発生した場合にのみ:を挿入し、私は次の表の持っている状態

Votation

Id: PK 
Title: string 
Expiration: DateTime 

をVotationOptions

Id: PK 
Option: string 
VotationId: FK 

ユーザーはその間Votation.ExpirationはしていないVotationOptionを挿入することができます期限切れ。

生産時に有効期限が切れていない可能性があり、オプションが実際にデータベースに挿入されて有効期限が切れている可能性があるため、有効期限を確認できません。

マイコード:

if (this.context.Votations.First(vot => vot.Id == 1 && vot.Expiration < DateTime.Now == null) return BadRequest(); 

var option = new VotationOption 
{ 
    Option = "Example", 
    VotationId = 1 
}; 

this.context.VotationOptions.Add(option); 
this.context.SaveChanges(); 

私はこれをしたい:

this.context.VotationOptions.AddWhere(option, vot => vot.Expiration < DateTime.Now); 
+0

あなたと哲学的な話をしましょう:締め切りの1秒前に「投票」をクリックし、サーバーに5秒遅れて締め切りから4秒後にデータベースに挿入された場合、まだ時間内に投票する?コード内で期限切れであるかどうかをチェックし、有効期限前にメソッドが起動した場合は書き込みを実行します(そうでない場合は、データベースレベルの制約が適用される必要があります)。 –

+0

_could_必要な_syntax_を与えるために、拡張メソッドを 'VotationOptions'(または基本タイプ)の型に追加します。しかし、実際のコードをきれいにするために何も組み込まれていません。拡張メソッド。 –

答えて

0

、単にそれを行うことができないEntity Frameworkのを使用。

resultデータベースが挿入終わった行の数を示すことになる
int result = this.context.Database.ExecuteSqlCommand("INSERT INTO VotationOptions (VotationId, Option) SELECT {your literal values} FROM Votation WHERE {check validity on the votation}"); 

:あなたはのようなものを使用することができますので、しかし、あなたはまだ生のSQLを実行するための基礎となるDBのコンテキストを使用することができます。 1つの結果しか返ってこないように、有効性チェックを書かなければならないことを覚えておいてください。

しかし、@ ElementplePeteのように、あなたの質問に彼のコメントで言及私は必要性を疑うだろう。

関連する問題