2016-11-29 80 views
0
// Create the scoresheet 
Scoresheet scoresheet = new Scoresheet(); 
scoresheet.tsakID = task.ID; 

// Query Items to retrieve a list of tasks. Then create a scoresheet 
// for each item retrieved and bind them together as foreign keys. 
var Items = (from c in db.Items 
      where c.ID == task.ID 
      select c).ToList(); 

// Save scoresheet item to db 
scoresheet.ScoresheetItems = new List<ScoresheetItem>(); 
System.Diagnostics.Debug.WriteLine(scoresheet.ScoresheetID); 

for (int i = 0; i < Items.Count(); i++) 
{ 
    ScoresheetItem scoresheetItem = new ScoresheetItem(); 
    scoresheetItem.ScoresheetID = scoresheet.ScoresheetID; 
    scoresheet.ScoresheetItems.Add(scoresheetItem); 
} 
db.Scoresheets.Add(scoresheet); 
db.SaveChanges(); 

的错误是在哪里我做scoresheetItem.ScoresheetID = scorehseet.ScoresheetID这是给我的OLE无法将NULL值插入列错误,我不知道一个办法解决这个

问题该行是记录表。 ScoresheetID在创建之前为空。当它在数据库上创建时,该值将被指定为自动递增值。

如何解决此问题,以便scoresheet.ScoresheetID不为空,以便我可以将其分配给scoresheetItem?

这里是记录表型号:

public class Scoresheet 
{ 
    public int ScoresheetID { get; set; } 
    public virtual ICollection<ScoresheetItem> ScoresheetItems { get; set; } 
} 

public class ScoresheetItem 
{ 
    public int ScoresheetItemID { get; set; } 
    public int ScoresheetItemScore { get; set; } 
    public Nullable<int> ScoresheetID { get; set; } 
} 
+0

什么?你是什​​么意思? –

+0

如果数据库中的'ScoresheetID'列被声明为整数,主键,自动增量,非空值,则不应该发生这种情况。 –

+0

Guids:您可以在客户端,服务器或任何地方生成ID。他们保证是独一无二的,所以如果问题你没有这些种类。 –

回答

1

如果ScoresheetID是标识列,那么你不应该在代码在所有创建时设置它。在你的对象上,你需要让EF知道这是一个标识列。如果这是第一次代码,这我假设,您可以使用数据标注

https://msdn.microsoft.com/en-us/library/jj591583(v=vs.113).aspx

或流畅API来配置和地图属性

https://msdn.microsoft.com/en-us/library/jj591617(v=vs.113).aspx

当创建子ScoresheetItem(S )你不应该设置ScoresheetID,你的模型应该被配置为关系。

这里有一个建模关系和导航属性。

https://msdn.microsoft.com/en-us/library/jj713564(v=vs.113).aspx

+0

我将我的模型添加到了我的问题中,它与他们在示例中所做的相同。答案如何解决问题?因为在将ID保存到服务器之前我需要该ID。 –

+1

如果它在数据库上自动添加,则在将它保存到服务器之前不需要该标识 – Gratzy

+0

我确实需要id,尽管因为schoresheetItem的外键链接到计分单。我列出的那条线给我的问题是我设置外键的地方。 –

0

好吧,这实际上是一个非常简单的故障。

其实没有必要在所有的设置外键比如我是做正确的位置:scoresheetItem.ScoresheetID = scorehseet.ScoresheetID

当我在代码中调用scoresheet.ScoresheetItems.Add(scoresheetItem);,它实际上处理的外键我。

相关问题