T-SQL触发器AFTER INSERT阻止从实体框架更新

时间:2015-03-04 15:28:10

标签: c# sql sql-server entity-framework linq-to-sql

我有一个使用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的触发器,一切都恢复正常。我把它添加回来的那一刻,问题又回来了......

任何人都知道可能导致此问题的原因是什么?

0 个答案:

没有答案