我正在创建一个小应用程序,其中我使用LINQ To SQL对数据库执行所有操作。
现在我在这里给出我数据库结构的一小部分,请看一下。
所以更新语言细节我正在使用像这样的datacontext获取登录对象。
XVDataContext Context = new XVDataContext ();
var myQuery = from objLogIn in Context.GetTable<LogIn>() where objLogIn.Emp_Id == nEmpId select objLogIn;
在nEmpId中,我总会有一些价值。
因此,实际上我没有创建任何问题我从DB获取所需的记录并使用以下代码将其存储在objUser对象中。
LogIn objUser = myQuery.First<LogIn>();
现在更新LanguageDetail我正在执行以下代码,但是当我执行SubmitChanges行时它会抛出异常。
这是我正在执行更新的代码。
LanguageDetail obj = new LanguageDetail();
foreach (string sLanguages in TextBoxLanguagesKnown.Text.Split('\n'))
{
obj.Emp_Id = objUser.Emp_Id;
obj.Language = sLanguages.Trim();
}
objUser.LanguageDetails[0] = obj;
Context.SubmitChanges();
我已阅读以下链接。
cannot add an entity with a key that is already in use
LINQ To SQL exception with Attach(): Cannot add an entity with a key that is alredy in use
Cannot add an entity with a key that is already in use (LINQ)
通过阅读上述链接,我发现我在ID字段中犯了一些错误,但仍然无法解决。
请告诉我对提出此问题的明确理解,以及如何解决此问题。
修改
我只是想更新LanguageDetail表。
当我尝试使用以下代码添加新对象时,它仍会抛出异常。
objUser.LanguageDetail.Add(obj);
答案 0 :(得分:1)
根据我的理解,您希望更新数据库中的LanguageDetail实体。为此,您必须执行以下操作之一:
修改你的代码应该有效:
Context.LanguageDetails.Attach(obj);
objUser.Employee_LanguageDetails[0] = obj;
答案 1 :(得分:1)
您可能希望使用以下代码为特定用户添加/删除语言。
var languages = TextBoxLanguagesKnown.Text.Split('\n');
// Removes deleted languages (first find all language details that are missing from the UI).
var deletedLanguages = objUser.LanguageDetails.Where(ld => !languages
.Any(l => ld.Language == l.Trim())).ToArray();
foreach(var deletedLanguage in deletedLanguages)
{
objUser.LanguageDetails.Remove(deletedLanguage);
Context.LanguageDetails.DeleteOnSubmit(deletedLanguage);
}
// Adds new languages (then adds new language details that are not found in the database).
var newLanguages = languages.Where(l => !objUser.LanguageDetails
.Any(ld => ld.Language == l.Trim())).ToArray();
foreach (string newLanguage in newLanguages)
{
var languageDetail = new LanguageDetail
{
Emp_Id = objUser.Emp_Id,
Language = newLanguage.Trim()
};
objUser.LanguageDetails.Add(languageDetail);
}
Context.SubmitChanges();