没有PK的表中记录数据不正确

时间:2014-11-26 19:53:04

标签: c# sql-server entity-framework sql-server-2008

我正在使用我无法修改的数据库。有一个表可以跟踪其他表中的更改,并且没有主键。 我能够复制我在测试数据库中遇到的问题。 sql server是MS-SQL 2008 R2。

CREATE TABLE [dbo].[TrackerTest](
    [Action] [varchar](50) NULL,
    [Date] [int] NOT NULL,
    [Time] [int] NOT NULL,
    [TrackComment] [varchar](254) NULL
) ON [PRIMARY]

日期存储为整数,格式为yyyymmdd,时间是自午夜以来的秒数。

这是控制台应用程序的一个片段。

 var db = new DataTestEntities();
 var track = from t in db.TrackerTests select t;
 foreach (var test in track)
 {
     Console.WriteLine("{0}, {1}, {2}, {3}", test.Action, test.Date, test.Time, test.TrackComment);    
 }
 Console.ReadLine();

我的问题是: 如果有2条记录具有相同的日期和时间值,则它们都显示相同的Action和TrackComment值,即使它们在数据库中不同。 例如: 在数据库中使用此数据:

insert into TrackerTest Values('action1',20141114,49231,'comment1');
insert into TrackerTest Values('action2',20141114,49231,'comment2');
insert into TrackerTest Values('action3',20141107,27028,'comment3');
insert into TrackerTest Values('action4',20141121,51633,'comment4');
insert into TrackerTest Values('action5',20141121,51633,'comment5');

我在控制台应用程序中获得此输出

action1, 20141114, 49231, comment1
action1, 20141114, 49231, comment1
action3, 20141107, 27028, comment3
action4, 20141121, 51633, comment4
action4, 20141121, 51633, comment4

记录数量很好,但内容不是。

我错过了什么或这是一个错误吗?

2 个答案:

答案 0 :(得分:1)

我一直在四处寻找解决这个问题的方法,但到目前为止还没有运气。 正如@Chris Ballance所述" EF在非PK表格中表现不佳。" 我无法修复该模型,因为第三方供应商不允许我这样做,因此我不知道这是否可以被视为解决方案或解决方案。 所以,这就是我如何解决它。 在我们的另一台服务器上,我使用"Linked Server"创建了与第一台服务器的连接。 在该服务器中,我创建了一个数据库,我的应用程序也在使用。我刚刚添加了一个在链接服务器中执行查询的存储过程。从EF和所有的调用存储过程 数据就在应有的位置。 希望这有助于其他人。

答案 1 :(得分:0)

您可以尝试更新循环代码以使用它:

foreach (var t in db.TrackerTests.ToList())

这可以防止延迟加载您正在循环的枚举,并且可能只是解决您的问题。

但是,如果您正在使用没有主键的表格,那么您实际上并不是在使用表格,只是没有明确定义的数据图表。枚举或遵循索引。

修复您的模型,而不是帮助解决问题如果您无法更改数据库,请找到可以找到的人,并找出未在此表中定义主键的原因。