Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 此LINQ保存功能可接受吗?(有这样的共享插入/更新逻辑吗?)寻找反馈_Wpf_Linq_Insert_Save - Fatal编程技术网

Wpf 此LINQ保存功能可接受吗?(有这样的共享插入/更新逻辑吗?)寻找反馈

Wpf 此LINQ保存功能可接受吗?(有这样的共享插入/更新逻辑吗?)寻找反馈,wpf,linq,insert,save,Wpf,Linq,Insert,Save,我是WPF的新手,正在为“正确的方式”而挣扎 public void Save(CompanyContact entityToSave) { try { var saveEntity = (from cc in db.CompanyContacts where cc.CompanyContactId == entityToSave.CompanyContactId select cc).SingleOrDefault(); if (sa

我是WPF的新手,正在为“正确的方式”而挣扎

public void Save(CompanyContact entityToSave)
{
  try
  {

    var saveEntity = (from cc in db.CompanyContacts
        where cc.CompanyContactId == entityToSave.CompanyContactId
        select cc).SingleOrDefault();

    if (saveEntity == null)
    {
      //INSERT logic                    
      entityToSave.CreatedById = new CompanyPersonRepository().GetCompanyPerson(DataContext.Default.LoginUsername).CompanyPersonId;
      entityToSave.ModifiedById = entityToSave.CreatedById;

      db.CompanyContacts.InsertOnSubmit(entityToSave);
      db.CompanyContacts.Context.SubmitChanges();
    }
    else
    {
      //UPDATE logic            
      saveEntity.ModifiedById = new CompanyPersonRepository().GetCompanyPerson(DataContext.Default.LoginUsername).CompanyPersonId;
      saveEntity.CompanyId = entityToSave.Company.CompanyId;
      saveEntity.FirstName = entityToSave.FirstName;
      saveEntity.LastName = entityToSave.LastName;
      saveEntity.CompanyContactTypeId = entityToSave.CompanyContactTypeId;

      db.CompanyContacts.Context.SubmitChanges();

    }


如果没有,请您提供一些关于为什么没有的意见,或者提供一个更好的方法来编写LINQ函数的例子,如果我没有走上正确的道路???

,这会起作用;您还可以将该记录作为变量存储在表单中,如果该记录为null,则该记录不存在,但如果存在,则需要进行更新。这样,您可以最小化查询,只需将表单值分配给一个对象,而不必处理两个对象

或者,如果将LINQ对象绑定到表单,因为它实现了INotifyPropertyChanged,那么如果在表单中设置绑定并将该对象指定为datacontext,则任何更改都会立即绑定到该对象


HTH.

谢谢您的评论。。。我对这方面还很陌生,所以希望您能为我解释一些问题:如果违反了数据库规则,您会怎么做?当我回答我在这里发布的问题时,我发现了一个问题:是否有一个设置值可以提供给LINQ,以便在违反数据库规则时不需要捕获SqlException并刷新对象集合。。。我需要编写代码来捕获和处理db规则冲突,这似乎很愚蠢……嘿,我过去所做的是,每个LINQ列都有一个[column()]定义(类型为ColumnAttribute),您可以使用反射来下拉字段并检查长度、类型、空性等。。。如果您不想这样做,可以在保存和标记这些错误的用户之前设置自己的自定义验证。除此之外,是的,您必须捕获异常。我所做的是为该请求单独创建一个上下文,尝试保存,如果出现错误,通知用户并让该上下文消失。继续。。。这样,当它们再次进行保存时,您只需重新构建对象并在停止的位置工作。毕竟,表单仍然有底层数据。