数据库不会与Attach方法更新(Database does not get updated wit

2019-06-25 16:13发布

我想学习的LINQ to SQL。 我已经成功实施的插入方法和数据被越来越插入到数据库中。 当我尝试更新现有数据,它不会反映到数据库中,即使有也不例外。 能否请你穿上什么可能出了错一些轻?

注:账户号码是主键

编辑

下面的代码行使得它的工作。 但是,你能解释一下为什么我们需要一个刷新

    accountRepository.UpdateChangesByAttach(acc1);
    accountRepository.RefreshEntity(acc1);
    accountRepository.SubmitChanges();

注意:

DataContext.Refresh method refreshes object state by using data in the database.

刷新与KeepCurrentValues选项来完成。 我的理解是它会保留我在实体对象更新的值。 我提供(只),它需要在数据库中更新所需的信息。 需要此刷新获得剩余的列值?

客户

using (var context = new   RepositoryLayer.LibraryManagementClassesDataContext(connectionstring)) 
   {
            context.Log = Console.Out;

            RepositoryLayer.Repository<RepositoryLayer.Account> selectedRepository = new RepositoryLayer.Repository<RepositoryLayer.Account>();
            //selectedRepository.Context = context;
            AccountBusiness accountBl = new AccountBusiness(selectedRepository);

            //Transaction 1
            //List<RepositoryLayer.Account> accountList = accountBl.GetAllAccounts();

            //Transaction 2
            //accountBl.InsertAccounts();

            //Transaction3
            accountBl.UpdateAccounts();


   }

业务层

    public void  InsertAccounts()
    {
        RepositoryLayer.Account acc1 = new RepositoryLayer.Account();
        acc1.AccountNumber = 4;
        acc1.AccountType = "Contract";
        acc1.Duration = 6;

        accountRepository.InsertOnSubmit(acc1);
        accountRepository.SubmitChanges();

    }

    public void UpdateAccounts()
    {
        RepositoryLayer.Account acc1 = new RepositoryLayer.Account();
        acc1.AccountNumber = 4;
        acc1.AccountType = "TEST";
        acc1.Duration = 10;

        accountRepository.UpdateChangesByAttach(acc1);
        accountRepository.SubmitChanges();

    }

知识库

public class Repository<T> : IRepository<T> where T : class
{
    public System.Data.Linq.DataContext Context
    {
        get;
        set;
    }

    public virtual System.Data.Linq.ITable GetTable()
    {
        return Context.GetTable<T>();
    }


    public virtual void InsertOnSubmit(T entity)
    {
        GetTable().InsertOnSubmit(entity);
    }

    public virtual void UpdateChangesByAttach(T entity)
    {
        GetTable().Attach(entity);
    }


    public virtual void SubmitChanges()
    {
        Context.SubmitChanges();
    }

    public virtual void RefreshEntity(T entity)
    {
        Context.Refresh(System.Data.Linq.RefreshMode.KeepCurrentValues, entity);
    }


}

  1. LINQ to SQL的:更新不刷新时“UpdateCheck的=从不”

  2. LINQ to SQL的连接/刷新实体对象

  3. 什么是LINQ到SQL表<T> .Attach吗?

  4. 为什么要使用GetOriginalEntityState()在我的LINQ to SQL资料库保存方法?

  5. 我怎么能拒绝在LINQ到SQL的DataContext的所有更改?

Answer 1:

这是由以下的问题的答案解析更新,而不刷新时“UpdateCheck的=从不”:LINQ to SQL的 。

这不使用刷新和有更新语句之前没有select语句。



Answer 2:

我做了它的工作如下。 但我还是想知道为什么我们需要为此工作刷新。 能否请您解释一下吗?

在库新增功能

    public virtual void RefreshEntity(T entity)
    {
        Context.Refresh(System.Data.Linq.RefreshMode.KeepCurrentValues, entity);
    }

呼叫改变

    public void UpdateAccounts()
    {
        RepositoryLayer.Account acc1 = new RepositoryLayer.Account();
        acc1.AccountNumber = 4;
        acc1.AccountType = "TEST";
        acc1.Duration = 10;

        accountRepository.UpdateChangesByAttach(acc1);
        accountRepository.RefreshEntity(acc1);
        accountRepository.SubmitChanges();

    }


文章来源: Database does not get updated with Attach method