使用生成的方法

时间:2013-01-08 16:36:16

标签: c# entity-framework entity-framework-4

我的数据库的EF实体模型我正在使用C#和VS2010。该模型有一个名为tblPendingMessages的实体,我用它来创建由我的SQL Server代理定期调度的消息。这很简单。

EF似乎已生成名为tblPendingMessages的实体CreatetblPendingMessage的方法。该方法看起来非常适合添加新的待处理消息,但其参数包括主键,即主标识列。通常情况下,我会使用null,但Intellisense不允许,它需要int ...

我该怎么做?

-------编辑

我做了更多的研究。 EF似乎并不是很受欢迎,但由于我刚刚开始,它似乎与最新的波有意义。

无论如何,'CreatetblPendingMessage'方法是一个工厂方法,用于创建单个'tblPendingMessage'“row”实例。仍然必须将新的“行”添加到tblPendingMessages对象,然后保存更改。我找到了一些代码示例,这就是我最终做的事情(善良,我仍然是一个c#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;
    }

1 个答案:

答案 0 :(得分:0)

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

public partial class tblPendingMessages
{
    public static tblPendingMessages CreatetblPendingMessage(string foo, int bar)
    {
        return CreatetblPendingMessage(-1, foo, bar);
    }
}