在我的网站上,我有一张用户填写的评分表。他们通常会在评分表上有10个项目,每个项目都有自己的分数。我想以最佳方式设计这个以便将来扩展。如果我希望将来在评分表上有更多或更少的项目?
以下是我现在所拥有的:
public class Scoresheet
{
public int ScoresheetId { get; set; }
public int DistanceAway1 { get; set; }
public int score1 { get; set; }
public int DistanceAway2 { get; set; }
public int score2 { get; set; }
public int DistanceAway3 { get; set; }
public int score3 { get; set; }
public int DistanceAway4 { get; set; }
public int score4 { get; set; }
public int DistanceAway5 { get; set; }
public int score5 { get; set; }
public int DistanceAway6 { get; set; }
public int score6 { get; set; }
public int DistanceAway7 { get; set; }
public int score7 { get; set; }
public int DistanceAway8 { get; set; }
public int score8 { get; set; }
public int DistanceAway9 { get; set; }
public int score9 { get; set; }
public int DistanceAway10 { get; set; }
public int score10 { get; set; }
}
这样做是否更好,或者将所有10个分数和距离放在同一行是否更好?我宁愿把它们放在同一行,因为我可以将这一行直接拉成一个模型。我原本以为这样做,所以我可以很容易地改变得分表上有多少个插槽,但它看起来并没有真正的好处,特别是因为我正在使用MVC开发而且我将永远需要整个评分表。
请帮助,我可以将所有数据放在一行中作为评分表吗?这是一个好习惯吗?
这是我想要提出的建议,但是因为每个得分都有不同的目的,所以会有所不同。
public class Scoresheet712
{
public int Scoresheet712ID { get; set; }
public virtual ICollection<Scoresheet712Item> Scoresheet712Items { get; set; }
}
喜欢这个?
select *,sum(marks) as marks
from your_table
where san not in (select san from your_table where is_goodDegree=0 )
group by san,temp_key;
答案 0 :(得分:0)
我倾向于同意@Stephen Muecke的灵活性和可扩展性,你真的需要两个sql表。
public class Scoresheet
{
public int ScoresheetId { get; set; }
public string ScoresheetName { get; set; }
public ICollection<ScoresheetItem> ScoresheetItems { get; set; }
}
和
Public class ScoresheetItem
{
public int ScoresheetItemId { get; set; }
public int Score { get; set; }
public int Distance { get; set; }
//Navigation properties
public int ScoresheetId { get; set; }
public Scoresheet Scoresheet { get; set; }
{
这将允许您根据需要使用任意数量的项目构建新的Scoresheet。以下示例显示了用法。
//Create a new Scoresheet
Scoresheet scoresheet712 = new Scoresheet()
{
ScoresheetName = "Score Sheet 712",
ScoresheetItems = new List<ScoresheetItem>()
};
//Add a ScoresheeItem to Scoresheet
scoresheet712.ScoresheetItems.Add(new ScoreSheetItem()
{
Score = 10,
Distance = 150
});
请记住,在您的视图中,您不需要使用数据模型,您始终可以添加数据传输对象(Scoresheet_DTO)并为您的评分表制作平面结构,如果它确实使显示更容易/更好,只需一定要使用nullable integers
。
更新许多关系
对于多对多关系,如果在代码中正确设置,它将自动创建连接表。 Scoresheet类保持不变,但ScoresheetItem类对Relationship / Navigation属性的改动很小。
Public class ScoresheetItem
{
public int ScoresheetItemId { get; set; }
public int Score { get; set; }
public int Distance { get; set; }
//Navigation properties
public ICollection<Scoresheet> Scoresheet { get; set; }
{
如需进一步的帮助,我建议您查看此Entity Framework Tutorial