ユーザー ASP.NET MVC 3 ページの作成があります。このページには、DB の Cars テーブルから事前設定された車の複数選択ボックスがあります。ユーザーを保存すると、ユーザーが関連付けられている CarId の int のリストが返されます。WCF サービスと Entity Framework 5.0 を使用して、データを SQL Server に戻し、SQL サーバーに保存しています。
次に、DB CarUser にテーブルを作成します。これには、ユーザー ID とクライアント ID だけが含まれます。User テーブルの UserId と Cars テーブルの CarId に対する 2 つの FK です。
ユーザーを作成すると、更新中の CarUser テーブルが正しく更新されます (たとえば、次のようになります)。
CarId UserId 2 4 3 4 4 4 5 4
したがって、CarUser テーブルには、Multi Select ボックスから選択された 4 つの CarId に関連付けられた User 4 が表示されているという点で正しく見えます。ただし、私が抱えている問題は、cars テーブルで Cars を再作成していることです。たとえば、Car Id 9,10,11,12 を作成していますが、それらの詳細は 2,3,4 とまったく同じです。 ,5
このために私が書いたコードは以下のとおりです。
public User User_Create(User user, List<int> carIds)
{
DAL.CarUserWCFFServiceImpl carUser = new DAL.CarUserWCFFServiceImpl();
// cal the DAL layer to do the create
User newUser = carUser.User_Create(user);
//call the DAL layer to create the cars linked to a user
carUser.CarUserMapping_Create(newUser.UserID, carIds);
したがって、最初のDALメソッド(このコードがリストされているレイヤーの下のレイヤー)の呼び出しによりユーザーが作成されます-次に、ユーザーを取得したら、IDなどを取得して、DALレイヤーで別のメソッドを呼び出し、UserIDを渡します新しく作成されたユーザーと、そのユーザーに関連付けられた carIds のリスト。
2番目の方法のコードは次のとおりです。
public void CarUserMapping_Create(int userId, List<int> carIds)
{
using (CUEntities entities = new CUEntities())
{
User user = User_GetById(userId);
entities.Users.Attach(userId);
foreach (int carId in carIds)
{
Car car = Car_GetById(carId);
user.Cars.Add(car);
entities.ObjectStateManager.ChangeObjectState(user, System.Data.EntityState.Modified);
entities.SaveChanges();
}
}
}
誰かが私が間違っていることを見ることができますか? 私が考えている他のオプションは、これをEntity Frameworkから取り除き、CarUserMapping_Createでストアドプロシージャを呼び出すだけです