【发布时间】:2011-08-19 05:44:42
【问题描述】:
我有一个奇怪的问题,我正试图弄清楚是我的代码还是数据库搞砸了。我有一个表 WebClienteLogin ,它有一个属性 Id(主键,自动增量)。当用户在网站上注册时,我正在插入新记录。
昨天早上最后一个注册用户的id值达到了9000左右,下午开始奇怪地跳跃,所以下一个用户的id是1200,25000......,它达到了290000。然而,今天它继续正常(增加1)。从统计数据来看,当有大量用户同时注册时会发生这种情况。
使用的技术:SQL Server 2008 R2、ASP.NET MVC2、.NET 3.5
我正在使用带有 LINQ 的存储库模式。这是我的一个存储库的实现。
public SQLWebClientLoginRepository(string connectionString)
{
dataContext = new DataContext(connectionString);
tabla = dataContext.GetTable<WebClientLogin>();
}
public bool Save(WebClientLogin user)
{
bool success = true;
try
{
if (user.Id == 0)
{
tabla.InsertOnSubmit(user);
}
else if (tabla.GetOriginalEntityState(user) == null)
{
tabla.Attach(user);
tabla.Context.Refresh(RefreshMode.KeepCurrentValues, user);
}
tabla.Context.SubmitChanges();
}
catch
{
......
}
return success;
}
用户还附加了其他对象,因此它插入到两个表中,并且 LINQ 将其包装到事务中。
var user = new WebClientLogin();
// assigning other properties
user.WebClient = new WebClient { // setting propeties }
webClientLoginRepository.Save(user)
在日志中我得到异常:
试图删除一个 WebClientLogin 和 WebCLient 之间的关系 但是,关系的外键之一 (WebClient.WebCLientLogin_id) 不能设置为 null。”异常
我不知道为什么要这样做!有没有人经历过类似的事情?
【问题讨论】:
标签: c# sql-server linq-to-sql asp.net-mvc-2 repository-pattern