Standardwerte (von C # -Variablen) Problem in LINQ to SQL Update

Ich habe den folgenden Code zum Aktualisieren der Kontentabelle mit LINQ to SQL. AccountNumber ist die Primärschlüsselspalte. Der einzige Wert, der aktualisiert werden muss, ist AccountType. Die Duration wird jedoch auch mit Null aktualisiert (Standardwert für int). Wie können wir dieses unnötige Überschreiben vermeiden?

Hinweis: Ich benutzeAnfügen Methode

Hinweis: Ich verstehe den Grund für dieses Verhalten. "Der DataContext kann nicht zwischen einem Feld mit dem zugewiesenen Wert Null und einem Feld ohne Zuordnung unterscheiden." Ich suche nach einer Lösung, um dies zu überwinden.

[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Duration", DbType="Int NOT NULL"
public int Duration

Tabelle DATA

Tabellenstruktur:

 CREATE TABLE [dbo].[Account](
[AccountNumber] [int] NOT NULL,
[AccountType] [nchar](10) NOT NULL,
[Duration] [int] NOT NULL,
[DepositedAmount] [int] NULL,
 CONSTRAINT [PK_Account] PRIMARY KEY CLUSTERED 
 (
[AccountNumber] ASC
 )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
 ) ON [PRIMARY]

CODE

    public void UpdateAccount()
    {
        RepositoryLayer.Account acc1 = new RepositoryLayer.Account();
        acc1.AccountNumber = 4;
        acc1.AccountType = "Verify";

        accountRepository.UpdateChangesByAttachAndRefresh(acc1);
        accountRepository.SubmitChanges();

    }


    public virtual void UpdateChangesByAttachAndRefresh(T entity)
    {

        //Can GetOriginalEntityState cause any bug? Is it unnecessary?           
        if (GetTable().GetOriginalEntityState(entity) == null)
        {
            //If it is not already attached

            Context.GetTable<T>().Attach(entity);
            Context.Refresh(System.Data.Linq.RefreshMode.KeepCurrentValues, entity);


        }

    }

Generiertes SQL

UPDATE [dbo].[Account]
SET [AccountType] = @p3, [Duration] = @p4
WHERE ([AccountNumber] = @p0) 
AND ([AccountType] = @p1) 
AND ([Duration] = @p2) 
AND ([DepositedAmount] IS NULL)

-- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [4]
-- @p1: Input NChar (Size = 10; Prec = 0; Scale = 0) [TEST      ]
-- @p2: Input Int (Size = -1; Prec = 0; Scale = 0) [10]
-- @p3: Input NChar (Size = 10; Prec = 0; Scale = 0) [Verify]
-- @p4: Input Int (Size = -1; Prec = 0; Scale = 0) [0]

-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.1

LESEN:

Kann LINQ-to-SQL beim Einfügen nicht angegebene Spalten auslassen, sodass ein Datenbankstandardwert verwendet wird?

Wie kann ich eine Enum an einen DbType von Bit oder Int binden?

Linq to SQL: Warum erhalte ich IDENTITY_INSERT-Fehler?

LINQ to SQL: Aktualisierung ohne Aktualisierung bei "UpdateCheck = Never"

Antworten auf die Frage(2)

Ihre Antwort auf die Frage