私はLinq To SQLを使用してViewModelの値でデータベースのレコードを更新しようとしています。私はそれが働いていたが、それ以来停止している(詳細は後述)。Linq To SQLを使用してMVC3 ViewModelからレコードを更新する
私はCustomersドメインオブジェクトをテーブルにマップしています。 AutoMapperを使用してCustomerフィールドのサブセットを持つViewModel(CustomerEditVM)にマップするために、すべてのフィールドが必要なわけではありません。私は私のサービス層でこれを実行します。私は私のビューにCustomerEditVMのViewModelを送信し、ユーザーがレコードを編集
public CustomerEditVM GetCustomerEditVMById(int custId)
{
var domainCustomer = _repository.GetCustomerById(custId);
Mapper.CreateMap<Customer, CustomerEditVM>();
CustomerEditVM customer = Mapper.Map<Customer, CustomerEditVM>(domainCustomer);
return customer;
}
。私のサービス層では、私は戻ってCustomerオブジェクトにマッピングし、私のリポジトリ内のUpdateメソッドを呼び出します。ここでは
public void SaveCustomer(CustomerEditVM customer)
{
Mapper.CreateMap<CustomerEditVM, Customer>();
Customer newCust = Mapper.Map<CustomerEditVM, Customer>(customer);
_repository.Update(newCust);
}
は私のリポジトリとアップデート方法です:
namespace AuctionAdmin.Models.Repositories
{
public interface ICustomerRepository
{
Customer GetCustomerById(int custId);
void Update(Customer customer);
}
public class CustomerRepository : ICustomerRepository
{
private AuctionAdminDataContext _dataContext;
public CustomerRepository()
{
_dataContext = new AuctionAdminDataContext();
}
public Customer GetCustomerById(int custId)
{
var customer = _dataContext.Customers.SingleOrDefault(c => c.CustomerID == custId);
return customer;
}
public void Update(Customer customer)
{
_dataContext.Customers.Attach(customer);
_dataContext.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, customer);
_dataContext.SubmitChanges();
}
}
}
正常に動作するために使用アップデートが、今、このエラーで失敗します。
Unable to refresh the specified object. The object no longer exists in the database.
私は今、これは前にとてもよく働いた理由はわからないんだけど、私は適切にデータベースを更新するためにLINQを使用していないではないが、明らかありません。私はこれをどのようにしなければならないのですか?
おかげ