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:
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)
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
hinzufügen StoreGeneratedPattern="Identität" in den .edmx-Datei (Ansicht im txt-editor)
InformationsquelleAutor
Vom hier
Versuchen, die Einstellung "Automatisch Generierter Wert" false
InformationsquelleAutor w4ik
Ich hatte auch das gleiche problem, und löschen Sie die Tabelle aus und Lesen Sie es behoben. Ich weiß nicht, wie er die Lösung nicht schön, es sicherlich hat den trick und war sehr schnell. Seine hässlich, dass ist ein bug in Linq-to-Sql und Visual Studio 2008 (in meinem Fall könnte es ein bug sein, in anderen Versionen auch), aber mindestens eine lebenswerte bug.
InformationsquelleAutor William Triest
Ich hatte das gleiche Problem, aber die Vernichtung der Person und importieren Sie es wieder nicht tun, der trick für mich, die verursacht werden, um zu Graben, noch tiefer. Das eigentliche Problem hier ist, dass unter den SSDL Inhalt der entity-Diagramm es ist eine fehlende Attribut (StoreGeneratedPattern="Identity"), der sollte auf die ID-Eigenschaft der entity. Sobald Sie dieses Attribut hinzufügen Sie sollten alle gesetzt.
Beispiel:
InformationsquelleAutor Billy Logan
Ich gelöscht, die Tabelle aus *.dbml in visual studio eingefügt und es wieder. das obige problem ist gelöst!
InformationsquelleAutor tazari
Wie @Martin schon sagte, ich habe das gleiche problem, obwohl ich nicht löschen, wird das gesamte Diagramm, um es zu beheben. Alles was ich tun musste, war die Kraft, die das Diagramm neu zu generieren den code. Dies ist meist nur eine Frage der änderung etwas auf das Diagramm und ändern Sie zurück. In schweren Fällen, musste ich neu starten, VS oder sogar neu starten, um die designer zu regenerieren code.
InformationsquelleAutor Chris McKenzie
Versuchen Sie
Read Only
zutrue
.InformationsquelleAutor BlueMonkMN