Warum bin ich immer "kann Nicht einfügen expliziter Wert für die Identitätsspalte" in LINQ zu SQL, wenn ich nicht dass ein Wert für eine identity-Spalte?

Ich habe eine Tabelle, die wie folgt aussieht:
Warum bin ich immer

ClientID ist die einzige identity-Spalte habe ich in der Tabelle. UserID ist eine FK zu einem anderen Tabellen-Primärschlüssel.

Hier ist meine Linq to SQL-insert-code:

public void InsertClientByUsername(string username, Entities.Client clientInfo)
{

    using (LinqModelDataContext db = new LinqModelDataContext())
    {

        var existingClient = (from client in db.Clients
                              join ext_usr in db.User_Extendeds on client.UserID equals ext_usr.FriendlyUserID
                              join asp_usr in db.aspnet_Users on ext_usr.UserID equals asp_usr.UserId
                              where asp_usr.UserName.ToLower().Equals(username)
                              select client).SingleOrDefault();

        if (existingClient != null)
        {
            existingClient.Address1 = clientInfo.Address1;
            existingClient.Address2 = clientInfo.Address2;
            existingClient.City = clientInfo.City;
            existingClient.CompanyName = clientInfo.CompanyName;
            existingClient.CountryID = clientInfo.CountryID;
            existingClient.FaxNumber = clientInfo.Fax;
            existingClient.FirstName = clientInfo.FirstName;
            existingClient.LastName = clientInfo.LastName;
            existingClient.MailingAttention = clientInfo.Attention;
            existingClient.PhoneNumber = clientInfo.PhoneNumber;
            existingClient.StateID = clientInfo.StateID;
            existingClient.ZipCode = clientInfo.Zip;

        }
        else
        {
            int userID = (from ext_usr in db.User_Extendeds
                          join asp_usr in db.aspnet_Users on ext_usr.UserID equals asp_usr.UserId
                          where asp_usr.UserName.ToLower().Equals(username)
                          select ext_usr.FriendlyUserID).SingleOrDefault();

            Client newClient = new Client();
            newClient.UserID = userID;
            newClient.Address1 = clientInfo.Address1;
            newClient.Address2 = clientInfo.Address2;
            newClient.City = clientInfo.City;
            newClient.CompanyName = clientInfo.CompanyName;
            newClient.CountryID = clientInfo.CountryID;
            newClient.FaxNumber = clientInfo.Fax;
            newClient.FirstName = clientInfo.FirstName;
            newClient.LastName = clientInfo.LastName;
            newClient.MailingAttention = clientInfo.Attention;
            newClient.PhoneNumber = clientInfo.PhoneNumber;
            newClient.StateID = clientInfo.StateID;
            newClient.ZipCode = clientInfo.Zip;

            db.Clients.InsertOnSubmit(newClient);

        }

        db.SubmitChanges();
    }
}

In Fall, dass Sie neugierig sind, den Grund habe ich alle diese Aufgaben ist, da bin ich der übersetzung zwischen meine POCO-Domäne-Objekte und die linq generierte Objekte. Im Fall dieser Ausnahme, ist es unter dem Pfad der else-Anweisung, das erstellen einer neuen client.

Können Sie sehen, dass ich bin NICHT berühren der ClientID-Eigenschaft, die ist ~nur~ Identitätsspalte in der Tabelle.

Warum bin ich immer die "Nicht einfügen expliziter Wert für die Identitätsspalte in Tabelle 'Client', wenn IDENTITY_INSERT auf OFF festgelegt ist?

In Fall ist es nützlich, hier ist mein stacktrace:

System.Daten.SqlClient.SqlException wurde
unhandled by user code

Message="kann Nicht expliziten Wert legen
für Identitätsspalte in Tabelle 'Client'
wenn IDENTITY_INSERT auf OFF festgelegt ist."

Quelle=".Net SqlClient Data Provider"
ErrorCode=-2146232060 Class=16

LineNumber=1 Anzahl=544

Verfahren=""

Server="192.168.168.190" State=1

StackTrace:
System.Daten.SqlClient.SqlConnection.OnError(SqlException
- Ausnahme, Boolean breakConnection)
System.Daten.SqlClient.SqlInternalConnection.OnError(SqlException
- Ausnahme, Boolean breakConnection)
System.Daten.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject
stateObj)
System.Daten.SqlClient.TdsParser.Run(RunBehavior
runBehavior, SqlCommand cmdHandler,
SqlDataReader dataStream,
BulkCopySimpleResultSet
bulkCopyHandler, TdsParserStateObject
stateObj)
System.Daten.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader
ds, RunBehavior runBehavior, String
resetOptionsString)
System.Daten.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior
cmdBehavior, RunBehavior runBehavior,
Boolean returnStream, Boolean async)
System.Daten.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior
cmdBehavior, RunBehavior runBehavior,
Boolean returnStream, String-Methode,
DbAsyncResult Ergebnis)
System.Daten.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult
result, String methodName, Boolean
sendToPipe)
System.Daten.SqlClient.SqlCommand.ExecuteNonQuery()
System.Daten.Linq -.SqlClient.SqlProvider.Execute(Expression
Abfrage, QueryInfo queryInfo,
IObjectReaderFactory factory, Object[]
parentArgs, Object[] userArgs,
ICompiledSubQuery[] Unterabfragen, Objekt
lastResult -)
System.Daten.Linq -.SqlClient.SqlProvider.ExecuteAll(Ausdruck
Abfrage, QueryInfo[] queryInfos,
IObjectReaderFactory factory, Object[]
userArguments, ICompiledSubQuery[]
Unterabfragen)
System.Daten.Linq -.SqlClient.SqlProvider.System.Daten.Linq -.Anbieter.IProvider.Execute(Expression
Abfrage)
System.Daten.Linq -.ChangeDirector.StandardChangeDirector.DynamicInsert(TrackedObject
Element)
System.Daten.Linq -.ChangeDirector.StandardChangeDirector.Insert(TrackedObject
Element)
System.Daten.Linq -.ChangeProcessor.SubmitChanges(ConflictMode
failureMode)
System.Daten.Linq -.DataContext.SubmitChanges(ConflictMode
failureMode)
System.Daten.Linq -.DataContext.SubmitChanges()
im DomainModel.Repository.Beton.SqlClientRepository.InsertClientByUsername(String
username, Client clientInfo)

Könnten Sie SQL Profiler verwenden, um Blick auf die generierte SQL. Aber es gibt nicht viel Zweifel, dass L2S erzeugt einen Wert. Werfen Sie einen Blick in die genned code (Projekt|Alle Dateien Anzeigen), um zu sehen, ob die Metadaten für die ClientId Spalte hat wirklich den entsprechenden "identity marker" (es musnt, oder es muss irgendeine Datei version Verwirrung ...)
Bartelink, aus irgendeinem Grund war es eine seltsame Fehler in meinem code generiert. Ich löschte meine Daten Kontext und baute ihn wieder, und dieses mal hat es geklappt. Seltsam.
Ich hatte das gleiche problem... SqlDesigner Frage, die ich Schätze.

InformationsquelleAutor FalconKick | 2009-08-05

Schreibe einen Kommentar