0

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;
    }
4

1 に答える 1

0

-1orをエンティティ0の主キー値として渡すことができtblPendingMessagesます (エンティティはデータベースに送信されず、メモリ内に作成されます)。また、エンティティは部分クラスで宣言されているため、デフォルトの主キー値を使用する独自のより便利なメソッドを作成することもできます。

public partial class tblPendingMessages
{
    public static tblPendingMessages CreatetblPendingMessage(string foo, int bar)
    {
        return CreatetblPendingMessage(-1, foo, bar);
    }
}
于 2013-01-08T16:48:38.500 に答える