C#实体框架提交错误

时间:2012-11-28 15:50:26

标签: c# entity-framework

尝试在实体框架中调用.SaveChanges()时,我遇到了一个奇怪的错误。

我正在尝试保存Order这样的

public void SaveOrder(UserDTO user, ArticleDTO article, PriceDTO price, decimal amount)
{
    //Get the order with type cart. If no order exist create a new order with type cart.
    var order = _orderRepository.GetCartOrderForCustomer(user.Customer.CustomerREFID);

    if (order == null)
    {
        order = new Order()
        {
            CustomerREFID = user.Customer.CustomerREFID,
            CreateDate = DateTime.Now,
            OrderType = OrderType.Cart
        };

        _orderRepository.Add(order);
        _orderRepository.UnitOfWork.Commit();
    }
}

当我只调用这种方法时,确实工作正常。但是当我在这种方法之前调用另一种方法时,我会遇到错误。

之前的方法只是获取文章和价格。

public IEnumerable<Article> GetArticlesByCategory(int categorySection, int headCategory, string customerREFID)
{
    var currentUnitOfWork = this.UnitOfWork as MainBCUnitOfWork;

    //Linq query without keys.
    var result = (from a in currentUnitOfWork.Articles
                  join cat in currentUnitOfWork.Categories on a.CategoryID equals cat.CategoryID
                  join cf in currentUnitOfWork.CategoryReferences on cat.ID equals cf.CategoryID
                  join c in currentUnitOfWork.Customers on a.Lagstalle equals c.LagStalle
                  where cf.RefID == categorySection && cat.HuvudKat == headCategory && c.CustomerREFID == customerREFID
                  select a).ToList();

    var artnumbers = result.Select(a => a.Number).ToList();

    var prices = currentUnitOfWork.Prices.Where(p => artnumbers.Contains(p.ArtNr) && p.FtgNr == customerREFID).ToList();

    Parallel.ForEach(result, a =>
    {
        a.Prices = prices.Where(p => p.ArtNr == a.Number).ToList();
    });

    return result.ToList();

}

因此,在调用SaveOrder时,我收到此错误:

  

{System.Data.SqlClient.SqlException(0x80131904):违反PRIMARY KEY约束'PK_dbo.PriceArticles'。无法在对象'dbo.PriceArticles'中插入重复键。重复键值为(6653,1)。   该语句已终止。      在System.Data.SqlClient.SqlConnection.OnError(SqlException异常,Boolean breakConnection,Action 1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action 1 wrapCloseInAction)      在System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj,Boolean callerHasConnectionLock,Boolean asyncClose)      在System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,Boolean&amp; dataReady)      在System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,RunBehavior runBehavior,String resetOptionsString)      在System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,Boolean async,Int32 timeout,Task&amp; task,Boolean asyncWrite)      at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String method,TaskCompletionSource 1 completion, Int32 timeout, Task& task, Boolean asyncWrite) at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource 1 completion,String methodName,Boolean sendToPipe,Int32 timeout,Boolean asyncWrite)      在System.Data.SqlClient.SqlCommand.ExecuteNonQuery()      在System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator转换器,EntityConnection连接,字典2 identifierValues, List 1 generatedValues)      在System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager,IEntityAdapter adapter)   ClientConnectionId:dfc62e28-3751-4a54-89f4-5fa8195cab2a}

此表和get与Order表无关?当我只添加新的Order时,为什么Entity Framework会提交其他表?

我该如何解决这个问题?

0 个答案:

没有答案