1

我正在使用 EntityFramework 将项目版本号保存到数据库。在 UI 页面上,用户输入版本(主要、次要、构建)整数值并单击保存按钮 在我保存之前,我想确保没有创建重复的版本数据库。

我正在尝试确保major.minor.build 组合是独一无二的

ProjVersion newVersion=new ProjVersion ();
newVersion.Major=10;
newVersion.Minor=1;
newVersion.Build=1;
this.repository.Add<ProjVersion>(newVersion);
//here how can I ensure that no duplicate versions are added to database
 this.repository.SaveChanges();

[Serializable]
    public class ProjVersion 
    {
        [Key]
        public int Version_Id { get; set; }
        public int Major { get; set; }
        public int Minor { get; set; }
        public int Build { get; set; }
    }
4

2 回答 2

1

检查数据库中是否有任何条目与您尝试添加的内容具有相同的详细信息。如果不是,那么它是一个新版本,你应该添加它,如果是这样,那么它是一个重复的,你应该做任何你想做的事情来处理这种情况。

if (repository.Get(x => x.Major == newVersion.Major && 
    x.Minor == newVersion.Minor && x.Build == newVersion.Build)
    .Count() > 0)
{
     //notify the user that they are making a duplicate entry
}
else
{
     repository.SaveChanges();
}
于 2013-08-30T18:04:10.527 回答
1

听起来您需要使用 a Compound Key,其中所有属性(列)都是主键的一部分。

{
    [Key, Column(Order = 0)]
    public int Major { get; set; }

    [Key, Column(Order = 1)]
    public int Minor { get; set; }

    [Key, Column(Order = 2)]
    public int Build { get; set; }
}

尝试插入具有匹配键的记录将产生Exception.

于 2013-08-30T18:10:24.430 回答