私はCFのクラスを持っている:私はレコードを挿入しようとすると今EF CF 4.2およびSQL
CREATE TRIGGER IOI_LoweredName
ON Abc
INSTEAD OF INSERT
AS;
BEGIN;
SET NOCOUNT ON;
INSERT INTO Abc(Name, LoweredName) SELECT Name, LOWER(Name) FROM inserted
END;
:
私はトリガーを持っているデータベースでpublic class A
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id {get;set;}
[Required]
public string Name {get;set;}
public string LoweredName {get;set;}
[Timestamp]
public byte[] RowVersion {get;set;}
}
dc.Names.Add(new A { Name = "Test" });
dc.SaveChanges();
私は次のエラーを取得する:
Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. Refresh ObjectStateManager entries.
これを回避する方法はありますか? すべてのクラスは、RowVersion(Timestamp)列を持つ基本クラスから継承します。タイムスタンプフィールドで並行処理を使用する場合、EFでこのような単純なトリガーを使用することはできませんか?
は
主キー(上記の例に追加して)ある更新します。
アップデート2
これは、SQLプロファイラからです:
declare @0 nvarchar(100)
set @0=N'Test'
insert [dbo].[abc]([Name], [LoweredCompanyName]) values (@0, null)
select [Id], [RowVersion] from [dbo].[Abc] where @@ROWCOUNT > 0 and [Id] = scope_identity()
問題は、選択は何も返さないということです。
コード内でSaveChanges以降を呼び出すと、実際にエラーが発生しますか? –
SaveChanges()を実行しようとします。 – Patrick
あなたのトリガは実際にRowVersionを挿入しませんか、それとも単なる単純化ですか? –