2012-09-27 31 views
1

我有一個簡單的方法,我使用實體框架保存給出的客戶信息導入數據庫:將數據保存到數據庫中使用實體框架,並返回新插入的標識

public Customer AddCustomer(Customer customer) 
    { 
     using (var context = DataObjectFactory.CreateContext()) 
     { 
      context.AddObject("CustomerEntities", Mapper.Map(customer)); 

      context.SaveChanges(); 

      return customer; 
     } 
    } 

客戶類型是非常簡單的,它由ID和客戶名稱,所以當我們想要保存客戶時,我只需將客戶對象傳遞給AddCustomer方法,此時Id爲空,Name字段包含我要保存到數據庫的名稱。

這工作正常,名稱被插入到數據庫中,但是我想要做的是獲取保存的客戶標識並返回到調用函數,有沒有實現這一點?

編輯:

這是所使用的映射方法:

internal static class Mapper 
{ 
    internal static IList<Customer> Map(IEnumerable<CustomerEntity> entity) 
    { 
     return entity.Select(Map).ToList(); 
    } 

    internal static Customer Map(CustomerEntity entity) 
    { 
     return new Customer 
     { 
      CustomerId = entity.CustomerId, 
      Name = entity.Name 
     }; 
    } 

    internal static CustomerEntity Map(Customer customer) 
    { 
     return new CustomerEntity 
     { 
      CustomerId = customer.CustomerId, 
      Name = customer.Name 
     }; 
    } 
} 

感謝

+0

您是否在調用SaveChanges後檢查了'customer.Id'的值? –

+0

那麼它是否不會自動設置回Customer.Id? –

+0

是的,檢查了id,它仍然是空的。 – 03Usr

回答

2

與映射部分有點懷疑,因爲我們不知道是什麼Mapper.Map(customer)不會返回..但我確信它確實會返回一個新的實例...所以customer.Id將不會更改,因爲您不會將customer添加到上下文中,但Mapper.Map(customer)

編輯:好吧,我的猜測是正確的(什麼天才;))。所以這應該是

public int AddCustomer(Customer customer) 
{ 
    using (var context = DataObjectFactory.CreateContext()) 
    { 
     var customerEntity = Mapper.Map(customer); 
     context.AddObject("CustomerEntities", customerEntity); 

     context.SaveChanges(); 

     return customerEntity.Id; 
    } 
} 
+0

感謝您的評論,我已將Mapper部分添加到該問題中。 – 03Usr

+0

@ 03Usr你試過我的代碼嗎?認爲它應該可以工作 –

+0

@ 03Usr順便說一句,它們是現有的映射庫,比如AutoMapper。 –

相關問題