C# 访问实体对象然后保存它

C# 访问实体对象然后保存它,c#,entity-framework,C#,Entity Framework,我正在尝试获取并更新/添加我对EmailSetting记录所做的更改 这是我的密码: public partial class EmailSetting { private Entities entities; public IEnumerable<EmailSetting> GetEmailSettings() { try { if (entities == null) {

我正在尝试获取并更新/添加我对EmailSetting记录所做的更改

这是我的密码:

  public partial class EmailSetting
  {
    private Entities entities;

    public IEnumerable<EmailSetting> GetEmailSettings()
    {
      try
      {
        if (entities == null)
        {
          entities = Entities.DefaultConnection();
        }
        return from x in entities.EmailSettings select x;
      }
      catch (Exception ex)
      {
        MiscClasses.Logging.Log(MethodBase.GetCurrentMethod().Name, "An error occurred attempting to GetEmailSettings.", ex);
        throw;
      }
    }

    public EmailSetting GetDefaultEmailSetting()
    {
      try
      {
        if (entities == null)
        {
          entities = Entities.DefaultConnection();
        }
        return (from x in entities.AppSettings select x.EmailSetting).FirstOrDefault();       
      }
      catch (Exception ex)
      {
        MiscClasses.Logging.Log(MethodBase.GetCurrentMethod().Name, "An error occurred attempting to GetDefaultEmailSetting.", ex);
        throw;
      }
    }

    public void SaveDefaultEmailSetting(EmailSetting emailSetting)
    {
      try
      {
          entities.SaveChanges();
      }
      catch (Exception ex)
      {
        MiscClasses.Logging.Log(MethodBase.GetCurrentMethod().Name, "An error occurred attempting to GetDefaultEmailSetting.", ex);
        throw;
      }
    }

  }
公共部分类设置
{
私营实体;
公共IEnumerable GetEmailSettings()
{
尝试
{
如果(实体==null)
{
entities=entities.DefaultConnection();
}
从实体中的x返回。EmailSettings选择x;
}
捕获(例外情况除外)
{
Misclasses.Logging.Log(MethodBase.GetCurrentMethod().Name,“试图获取电子邮件设置时出错。”,例如);
投掷;
}
}
公共电子邮件设置GetDefaultEmailSetting()
{
尝试
{
如果(实体==null)
{
entities=entities.DefaultConnection();
}
返回(从entities.AppSettings中的x选择x.EmailSetting).FirstOrDefault();
}
捕获(例外情况除外)
{
Misclasses.Logging.Log(MethodBase.GetCurrentMethod().Name,“尝试GetDefaultEmailSetting时出错。”,ex);
投掷;
}
}
public void SaveDefaultEmailSetting(EmailSetting EmailSetting)
{
尝试
{
entities.SaveChanges();
}
捕获(例外情况除外)
{
Misclasses.Logging.Log(MethodBase.GetCurrentMethod().Name,“尝试GetDefaultEmailSetting时出错。”,ex);
投掷;
}
}
}

问题是,如果我添加一条记录,它不会在SaveDefaultEmail设置下保存,当我有一条新记录时,它不会做任何事情。如何在保存时检查记录是否已添加或更新,然后根据其状态进行保存?

举个例子,如果要将这些方法添加到
电子邮件设置
类中,这些方法应完成更新并创建事务

public void AddEmailSetting(EmailSetting-EmailSetting)
{
尝试
{
entities.EmailSetting.Add(EmailSetting);
entities.SaveChanges();
}
捕获(例外情况除外)
{
Misclasses.Logging.Log(MethodBase.GetCurrentMethod().Name,“尝试GetDefaultEmailSetting时出错。”,ex);
投掷;
}
}
public void UpdateEmailSetting(EmailSetting EmailSetting)
{
尝试
{
entities.EmailSetting.Update(EmailSetting);
entities.SaveChanges();
}
捕获(例外情况除外)
{
Misclasses.Logging.Log(MethodBase.GetCurrentMethod().Name,“尝试GetDefaultEmailSetting时出错。”,ex);
投掷;
}
}
而且,将实体注入到它跟踪的对象中似乎很奇怪?也许这是我不熟悉的模式

我将采用的方法是,要么使用一个单独的类来管理实体,要么只注入dbContext并对我从上下文中需要的实体执行CRUD操作

例如,假设您有一个控制器(dbContext被注入到您的控制器中),该控制器接收您想要添加的对象(遵循相同的模式进行更新),您将执行以下操作:

[路由(“~/add”)]
公共IActionResult添加(EmailSetting EmailSetting)
{
//无论您想在这里执行什么样的空检查或验证。
_dbContext.EmailSetting.Add(EmailSetting);
_dbContext.SaveChanges();
//添加后返回或重定向到任何视图/方法。
} 

对于更新,您将遵循相同的模式,更改路由和方法名称,然后对于
\u dbContext.EmailSetting.Update(对象)

无法添加的代码在哪里?@JosieG.Bigler我已经更新了问题,这是否回答了您的问题?我看不出您正在向
实体添加
电子邮件设置
。您应该在某个地方执行
entities.Emailsetting.Add(emailSettingObject)entities.SaveChanges()如果它是更新而不是添加,会发生什么?然后调用
entities.Emailsetting.update(emailSettingObject)实体。SaveChanges()