小编use*_*635的帖子

实体框架 - 在事务内的"SaveChanges"之前检索ID

在实体框架中 - 在调用"SaveChanges"之前,有没有办法在事务中检索新创建的ID(标识)?

我需要第二个插入的ID,但它总是返回0 ...

        ObjectContext objectContext = ((IObjectContextAdapter)context).ObjectContext;

        objectContext.Connection.Open();

        using (var transaction = objectContext.Connection.BeginTransaction())
        {
            foreach (tblTest entity in saveItems)
            {
                this.context.Entry(entity).State = System.Data.EntityState.Added;
                this.context.Set<tblTest>().Add(entity);

                int testId = entity.TestID;

                .... Add another item using testId
            }

            try
            {
                context.SaveChanges();
                transaction.Commit();
            }
            catch (Exception ex)
            {
                transaction.Rollback();
                objectContext.Connection.Close();
                throw ex;
            }
        }

        objectContext.Connection.Close();
Run Code Online (Sandbox Code Playgroud)

c# asp.net entity-framework

54
推荐指数
5
解决办法
6万
查看次数

实体框架 - "不允许新事务,因为会话中还有其他线程在运行"

我试图保存实体框架中的更改时出现以下错误 -

System.Data.SqlClient.SqlException:不允许新事务,因为会话中还有其他线程在运行.

我已经看到了这个问题的各种答案,但我似乎无法让它们中的任何一个工作,基本上我在我的存储库中的事务中保存了大量的项目,我必须循环几个项目来删除它们并编写一个审计记录.

我已经看到的所有其他答案(例如Mark Staffords答案)建议声明一个显式事务(我有)或仅在完成循环后调用保存更改(由于审计当前的工作方式,这不是一个选项 - 审计编写审计详细信息记录需要ID.

只要在delete方法中调用'SaveChanges',就会抛出错误,见下文 -

public virtual void Save(DoseReturn oldDoseReturn)
{
    // Get the datetime when the save started
    DateTime saveStartTime = DateTime.Now;
    Dictionary<string, object> oldValues = new Dictionary<string, object>();
    Dictionary<string, object> newValues = new Dictionary<string, object>();

    // Get the object context and open a new transaction
    ObjectContext objectContext = ((IObjectContextAdapter)context).ObjectContext;
    objectContext.Connection.Open();
    DbTransaction transaction = objectContext.Connection.BeginTransaction();

    // Use the transaction for all updates
    using (transaction)
    {
        if (oldDoseReturn != null)
        {
              IDoseReturnStatusRepository statusRepository …
Run Code Online (Sandbox Code Playgroud)

asp.net entity-framework transactions

6
推荐指数
1
解决办法
1万
查看次数

SQL插入失败 - 违反主键约束

我看到一个SQL Insert语句的一个非常奇怪的问题,我有一个简单的表,ID和2个日期时间,请参阅下面的创建脚本 -

CREATE TABLE [dbo].[DATA_POPULATION_LOGS](
    [ID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
    [START] [datetime] NOT NULL,
    [FINISH] [datetime] NOT NULL,
 CONSTRAINT [PK__DATA_POP__3214EC2705D8E0BE] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

我现在正在尝试运行以下插入脚本 -

INSERT INTO [dbo].[DATA_POPULATION_LOGS]
           ([START]
           ,[FINISH])
     VALUES
           (GETDATE()
           ,GETDATE())
Run Code Online (Sandbox Code Playgroud)

它失败了,出现以下错误 -

Msg 2627, Level 14, State 1, Line 1
Violation of PRIMARY KEY constraint 'PK__DATA_POP__3214EC2705D8E0BE'. Cannot insert duplicate …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server

3
推荐指数
1
解决办法
2万
查看次数

实体框架 - System.StackOverflowException

我是实体框架的新手,并试图将新项目插入查找表中.

错误是 -

" System.StackOverflowException mscorlib.dll中发生了未处理的类型异常"

它被抛出到下面的最终代码块中,其中DIEMEntities()调用了public .

每当我添加一个新项目时都会发生,我可以更新项目.

任何帮助,将不胜感激.

代码是 -

protected void OnSave(object sender, EventArgs e)
    {
        ArrayList validationErrors = new ArrayList();
        ContactTypeEO contactType = new ContactTypeEO();

        if (uxID.Value.Length > 0)
        {
            //Updating
            contactType.Id = int.Parse(uxID.Value);
        }

        contactType.Name = uxName.Text;
        contactType.ExpressionValidator = uxExpression.Text;

        contactType.Save(ref validationErrors);

        if (validationErrors.Count > 0)
        {
            ShowValidationMessages(validationErrors);
        }
        else
        {
            this.RefreshUI();
        }
    } 

public bool Save(ref ArrayList validationErrors)
    {
        ValidateSave(ref validationErrors);

        if (validationErrors.Count == 0)
        {
            if (Id == 0)
            {
                ContactTypeData.Insert(Name, …
Run Code Online (Sandbox Code Playgroud)

c# asp.net stack-overflow entity-framework

2
推荐指数
1
解决办法
7890
查看次数

SQL Server显式事务行为

我刚刚做了一个SQL考试,我真的很难处理2个关于交易的问题,它已经提交了,所以这只是为了我的理智......这些问题的答案是什么?

对不起,如果这不应该在这里,或者这些应该是2个单独的问题.

1.

Employee X has a salary of 40,000
a. User A begins a transaction and updates employee X's salary to salary * 1.1
b. User B begins a transaction and updates employee X's salary to salary * 1.25
c. User A rolls back their transaction
d. User B commits their transaction
Run Code Online (Sandbox Code Playgroud)

什么是员工X的薪水?(我去了50,000,没有提到事务隔离级别)

2.脚本构建如下 -

a. Transaction start
b. Insert record into table 1
c. Create savepoint
d. Insert record into table 2
e. Rollback to the save point …
Run Code Online (Sandbox Code Playgroud)

sql sql-server transactions

2
推荐指数
1
解决办法
135
查看次数

SSIS - 派生列计算错误

在SSIS的派生列中计算时遇到一些问题.

我正在尝试执行以下计算 -

4206 + ((4206 * 4206) * 0.000150000000000) + ((4206 * 4206 * 4206) * 0.000000010000000)
Run Code Online (Sandbox Code Playgroud)

我收到错误 -

**The magnitude of the result of a binary operation overflows the maximum size for result data type**
Run Code Online (Sandbox Code Playgroud)

将此计算粘贴到我的C#Web应用程序中会导致类似的问题 -

**The operation overflows at compile time in checked mode** 
Run Code Online (Sandbox Code Playgroud)

它抱怨这一节 - 4206 * 4206 * 4206.它也可以通过更改它在Web应用程序中解决4206 * 4206 * 4206L,但我不知道如何在SSIS包中解决此问题.

有没有人遇到过这个问题?任何想法,将不胜感激.

提前致谢.

编辑

溢出异常现在已解决,但旧计算和新计算返回的值略有不同,例如使用415作为输入值而不是4206 -

旧计算值= 419.014582新计算值= 419.042100

确切的计算是 -

老 - InputValue + ((InputValue * InputValue) * …

sql-server ssis

1
推荐指数
1
解决办法
534
查看次数