我有一个使用Entity Framework插入和更新表的应用程序 我有一个处理插入和更新的函数 - 接收新的/更新的实体并相应地处理它。
public int SubmitMyTable(MyTable myTable)
{
using (DataClassesDataContext DBContext = new DataClassesDataContext(ConnectionString))
{
try
{
MyTable updateMyTable = (from ag in DBContext.MyTables
where ag.ID == myTable.ID
select ag).SingleOrDefault();
if (updateMyTable == null)
{
DBContext.MyTables.InsertOnSubmit(myTable);
}
else
{
try
{
updateMyTable = (MyTable)CopyProperties(myTable, updateMyTable);
}
catch (ChangeConflictException cce)
{
foreach (var conflict in DBContext.ChangeConflicts)
{
conflict.Resolve(RefreshMode.KeepChanges);
}
}
}
DBContext.SubmitChanges();
return myTable.ID;
}
catch (Exception ex)
{
//Handle exception
}
}
}
对于新插入,我只需new MyTable()
,填写NOT NULL
列并将其发送到上述方法。 ID
列是自动递增的IDENTITY
。
对于更新,我通过ID列加载现有函数,更新需要更新的任何字段,并再次将其发送到上述方法。
现在,每当插入新行或更新现有行时,我都想更新同一数据库中的序列。
我为Update事件设置了触发器,如下所示:
CREATE TRIGGER [dbo].[MYCOUNTER]
ON [dbo].[MyTable]
AFTER UPDATE
AS
BEGIN
SELECT NEXT VALUE FOR MYSEQUENCE
这适用于表上的所有更新操作。我仍然缺少该表上的插入操作。我尝试在“AFTER”行添加Insert动作,如下所示:
AFTER INSERT, UPDATE
以及使用完全相同的语法/内容创建另一个触发器,除了名称和“INSERT”而不是“UPDATE”以及Update触发器。
添加INSERT会导致使用Entity Framework对DB表上的INSERT操作成功的问题。同时, UPDATE动作什么都不做 !!该行保持与初始INSERT之后的相同,我从实体框架中得到了没有例外,但没有任何反应!
我已经确认这是问题所在 - 通过删除INSERT的触发器,一切都恢复正常。我把它添加回来的那一刻,问题又回来了......
任何人都知道可能导致此问题的原因是什么?