私は2つのことをやろうとしています。最初に、ClientテーブルのレコードのIDを取得し、整数に変換します。私のクエリは大丈夫ですが、2番目のタスク、つまりInvestmentsテーブル(フィールド:Client_ID)のレコードを最初に言及したIDに更新するにはどうすればいいですか?ご協力いただきありがとうございます。おそらくこれを行うためのより良い方法があります。linqを使用してレコードのフィールドを更新するには
変更したとしてエンティティをマークする必要があり[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "ID,LastName,Fund,PurchaseDate,Shares,PurchasePrice,PurchaseAmount")] Investments investments)
{
if (ModelState.IsValid)
{
db.Ports.Add(investments);
db.SaveChanges();
//db.SaveChanges();
// write the Client_ID to the saved record
// first get the ID of the client
var q = (from c in context.Clients
where c.LastName == investments.LastName
select new
{
c.ID
}).ToList();
// next update the Client_ID of the Investment record
var result = (from p in context.Investments
where (p.LastName == investments.LastName)
&& (p.Client_ID == null)
select p);
//I'm not sure what to do next
//Context.SaveChanges();
return RedirectToAction("Index");
}
return View(investments);
}
++++++++++++++ new code 12/22/2016 - controller +++++++++++++++++
public ActionResult Create([Bind(Include = "ID,LastName,Fund,PurchaseDate,Shares,PurchasePrice,PurchaseAmount")] Investments investments)
{
if (ModelState.IsValid)
{
var clientId = (from c in context.Clients
where c.LastName == investments.LastName
select new
{
c.ID
}).ToList().First();
var productList = System.Collections.Generic.IList <Investments>{ investments };
foreach (var investment in investments)
{
investment.Client_ID = clientId;
}
db.Ports.Add(investments);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(investments);
}
+++++++++++++++++++++ model Investments +++++++++++++++++++++
using System;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace StockHoldings.Models
{
public class Investments
{
public int ID { get; set; }
[Required]
[StringLength(20)]
public string LastName { get; set; }
[Required]
public string Fund { get; set; }
[Required]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime PurchaseDate { get; set; }
[Required]
[Range(1, 1000)]
public int Shares { get; set; }
[Required]
[Range(0.01, 200.00)]
[DataType(DataType.Currency)]
public double PurchasePrice { get; set; }
[DataType(DataType.Currency)]
public double PurchaseAmount { get; set; }
}
ここであなたがしたいことは不明です。なぜあなたは '投資'モデルにクライアントのFKプロパティを含めるべきかを示す 'Client'プロパティに' LastName'プロパティが含まれていますか? –
@StephenMueckeは正しいです、InvestNameのLastNameが関連する場合データモデルが正規化されていないことを意味するクライアント。リレーショナルDBでは、データを複製してはいけません(MUST NOT)。データが矛盾してしまいます(クライアントが姓を更新した場合、すべての投資を更新しなければならない、あるいはデータが矛盾するでしょう。リレーショナルDB) – Piou
あなたの投稿がC#言語を使用しているため、C#タグが追加されました。これにより、より多くのユーザーにアプローチするのに役立ちます。 – RBT