别对我投掷石头-我在编程方面是个新手,尤其是在Entity Framework中。
我创建了一个小程序,该程序将一些变量记录到SQL表中。为了用记录变量表示表,我使用了与ObservableCollection
绑定的datagrid。 Datagrid
看起来像这样:
Id 是带有种子1的主键。问题是如何在不查询SQL表的情况下显示实际的ID号?
我尝试过:
VariableRecordOCtoShow.Add(new VariableRecord() //VariableRecord is class from entity model
{
Value = newVariableRecord.Value,
Time = newVariableRecord.Time,
IdVariableAssignment = newVariableRecord.IdVariableAssignment,
IdUser = newVariableRecord.IdUser
});
但是在datagrid的Id列中只有零。
我尝试过:首先创建一个数据库,什么是las ID号
public int getIdValue()
{
var query = (from p in context.VariableRecords
orderby p.Id descending
select p).Take(1).Single();
return query.Id;
}
第二次将其写入do变量:
idVariable = getIdValue();
然后将其写入ObservableCollection
的ID(不是实体模型的类)中,并在每条记录后将此变量加1(以下是写入方法的一部分):
VariableRecordOCtoShow.Add(new VariableRecord() // v tomto velkem radku jenom zapisuju do Observable Collection hodnoty ze vstupu + Id
{
Id = idVariable, //fake Id (calculated from query)
Value = newVariableRecord.Value,
Time = newVariableRecord.Time,
IdVariableAssignment = newVariableRecord.IdVariableAssignment,
IdUser = newVariableRecord.IdUser
});
idVariable++;
它有效,但仅在开始时-当我过夜测试程序时,性能出现了一些错误(某些变量未及时写入),并且最终OC的ID和SQL的ID不匹配。
你能帮我吗?如何在记录运行时不查询而在datagrid中显示 real 主键值?
谢谢。
答案 0 :(得分:0)
问题在于如何在不查询SQL表的情况下显示实际的ID号?
我不确定你的问题
首先,为什么不查询SQL表?
其次,我们通常不在视图中显示ID字段(Identity字段)。这不是一个好习惯。
仍然要显示,则始终可以在EF中查询:
ObservableCollection<VariableRecords> v =
new ObservableCollection<VariableRecords>(from p in context.VariableRecords
select c)
此外,您的第二种方法将来可能会出现问题,因为标识字段ID并不总是Max(ID)+1。 See this
值的重用–对于具有特定种子/增量的给定标识属性,标识值不会被引擎重用。如果特定的插入语句失败或插入语句回滚,则使用的标识值将丢失并且不会再次生成。生成后续标识值时,这可能会导致出现空白。