0

我有一个用于 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;
    }
4

1 回答 1

0

您可以传递-10作为实体的主键值tblPendingMessages(实体不会提交到数据库 - 它将在内存中创建)。您还可以创建自己的更方便的方法,该方法将使用默认主键值,因为实体是在部分类中声明的:

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