2011-05-31 63 views
0

Ladislav,对不起,也许我没有正确提出的问题。假设在WinForm应用程序我正在创建新的对象:EntityFramework创建对象

 var newEmission = _emissionBindingSource.Current as Emission; 
     if (newEmission == null) return; 
     newEmission.SharesNumber = _context.GetNewSharesNumber(); 

    public int GetNewSharesNumber() 
    { 
     return Shares.Max(s => s.Number)+1; 
    }` 

但最大s.Number没有改变,直到我没有带保存先前插入的对象。那么,在这种情况下,我必须分开保存每一个对象?

UPDATE 1 假设我已经创建了新的对象发射。我将Share.Max(s => s.Number)+1添加到新对象的SharesNumber字段。现在我想创建第二个排放对象,并且此对象的SharesNumber必须大于1,然后是上一个对象。只有当我保存第一个创建的对象时,我才能做到这一点

+0

如果这个问题只是澄清你的第一个问题,你不应该开始一个新的问题,而是修改旧的问题。 – 2011-05-31 09:08:20

+0

这需要更多的解释来理解你想要做什么。一般来说'Shares.Max'是不好的,因为如果你的应用程序被多个用户使用,他们可以用相同的编号创建排放。 – 2011-05-31 09:10:21

+0

拉迪斯拉夫,谢谢你的提示。假设我已经创建了新的对象排放。我将Share.Max(s => s.Number)+1添加到新对象的SharesNumber字段。现在我想创建第二个排放对象,并且此对象的SharesNumber必须大于1,然后是上一个对象。只有当我保存第一个创建的对象时,我才能做到这一点 – Alex 2011-05-31 11:09:28

回答

1
var newEmission = _emissionBindingSource.Current as Emission; 
    if (newEmission == null) return; 
    newEmission.SharesNumber = _context.GetNewSharesNumber(); 

public int GetNewSharesNumber() 
{ 
    // this will always query DB for max value 
    return Shares.CreateSourceQuery().Max(s => s.Number)+1; 
} 

,但我相信你应该使用某种形式的存储过程的分配新的号码或使用自动递增列,因为如果你有使用多个应用程序的多个用户,可能有重复号码的情况。

+0

对不起,我无法在Shares objectSet中找到CreateSourceQuery()方法。 – Alex 2011-05-31 11:22:46