我有一个用于 C# 和 VS2010 的数据库的 EF 实体模型。该模型有一个名为 的实体tblPendingMessages
,我用它来创建由我的 SQL Server 代理定期发送的消息。这很简单。
EF 似乎已经生成了一个tblPendingMessages
名为CreatetblPendingMessage
. 该方法看起来非常适合添加新的待处理消息,但它的参数包括主键,它是一个标识列。通常,我会使用null
,但 Intellisense 不允许它,它想要一个int
...
我该怎么做呢?
- - - - 编辑
我做了更多的研究。EF 似乎不是很受欢迎,但由于我才刚刚起步,似乎与最新的浪潮一起走是有道理的。
无论如何,'CreatetblPendingMessage' 方法是一个工厂方法,用于创建单个 'tblPendingMessage' “row” 实例。新的“行”仍然必须添加到 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;
}