C# と VS2010 で使用しているデータベース用の EF エンティティ モデルがあります。モデルには というエンティティがありtblPendingMessages
、これを使用して、SQL Server エージェントによって定期的にディスパッチされるメッセージを作成します。とてもシンプルです。
EF は、 というエンティティのメソッドを生成したようtblPendingMessages
ですCreatetblPendingMessage
。このメソッドは、新しい保留中のメッセージを追加するのに最適に見えますが、そのパラメーターには ID 列である主キーが含まれています。通常、私は を使用しますnull
が、Intellisense はそれを許可しませんint
。
どうすればいいですか?
- - - - 編集
さらに調査を行いました。EFはあまり人気がないようですが、私は始めたばかりなので、最新のウェーブを使用するのが理にかなっているようです。
とにかく、「CreatetblPendingMessage」メソッドはファクトリ メソッドであり、単一の「tblPendingMessage」「行」インスタンスを作成するために使用されます。その新しい「行」を tblPendingMessages オブジェクトに追加し、変更を保存する必要があります。私はいくつかのコード例を見つけました、そしてこれが私がやったことです(親切にしてください、私はまだac#newbyです....):
private void NotifyWorkbookError(List<string> MsgLst)
{
string msgs = string.Join(@"<br />",MsgLst.Select(i=>i.ToArray()));
string finalHTML = GetHTML(3).Replace("#WBMessage#",msgs);
using (CPASEntities ctx=new CPASEntities())
{
tblPendingMessage m = new tblPendingMessage
{
Recipient=@"jamesshaffer@n.com",
MessageBody=finalHTML,
MessageGenerated=DateTime.Now,
MessageFormat="HTML",
MessageCC=@"CPAS_TIMESHEET_AUDITOR@N.COM"
};
ctx.tblPendingMessages.AddObject(m);
ctx.SaveChanges();
}
}
private string GetHTML(int MessageID)
{
string htMsg;
using (CPASEntities ctx = new CPASEntities())
{
tblHTML h = (from ht in ctx.tblHTMLs
where ht.HTMLID == MessageID
select ht).FirstOrDefault();
htMsg = h.HTMLCode;
}
htMsg = htMsg.Replace("#ID#", TimesheetID.ToString());
htMsg = htMsg.Replace("#VendorName#", VendorFullName);
htMsg = htMsg.Replace("#WeekStart#", WeekStartDate.ToShortDateString());
htMsg = htMsg.Replace("#SubmittedBy#", Creator);
htMsg = htMsg.Replace("#SubmittedOnDate#", DateTime.Parse(CreateDate).ToShortDateString());
htMsg = htMsg.Replace("#ModifiedBy#", Modifier);
htMsg = htMsg.Replace("#ModifiedOnDate#", DateTime.Parse(ModDate).ToShortDateString());
htMsg = htMsg.Replace("#WorkbookStatus#", CurrentStatus);
htMsg = htMsg.Replace("#NewWorkbookStatus#", CurrentStatus);
htMsg = htMsg.Replace("#AbsoluteURL#", link);
return htMsg;
}