实体框架如何防止重复条目进入db

时间:2013-08-30 17:57:31

标签: c# entity-framework

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

我正在尝试的是确保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; }
    }

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:1)

听起来您需要使用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