sqlite 如何验证属性的唯一性?

bhmjp9jg  于 2022-11-24  发布在  SQLite
关注(0)|答案(2)|浏览(180)

编码:

public class MyRepository
{
    public TeamContext _teamContext;

    public MyRepository(TeamContext teamContext)
    {
        _teamContext = teamContext;
    }

    public void AddTeam(Team team)
    {
        team.Id = Guid.NewGuid();
        _teamContext.Team.Add(team);
    }
}

团队名称应该是唯一的。使用实体框架如何验证?

uajslkp6

uajslkp61#

您可以检查是否有其他记录具有 * 相同的名称 *。如果有,则需要抛出异常。否则,继续流程。

public void AddTeam(Team team)
{  
    if(_textContext.Team.Any(t => t.Name == team.Name))
    {
        throw new TeamAlreadyExists(team.Name);
    }
    team.Id = Guid.NewGuid();
    _teamContext.Team.Add(team);
}

我建议您从更高的级别(如 services)进行检查,以尽可能保持存储库的方法干净。
除此之外,还建议在数据库端使用 unique constraint,因为它是线程安全的,并且可以防止从其他地方编辑团队的名称。

zy1mlcev

zy1mlcev2#

使用UNIQUE约束,确保一列或一组列中的所有值彼此不同或唯一。例如:

CREATE TABLE contacts(
    contact_id INTEGER PRIMARY KEY,
    first_name TEXT,
    last_name TEXT,
    email TEXT NOT NULL UNIQUE
);

如果在电子邮件中插入重复值,则会出现如下错误:

Error while executing SQL query on database 'xxx': UNIQUE constraint failed: contacts.email

您还可以设置多列唯一:

CREATE TABLE tbaleName(
   ...
    UNIQUE(columnName_1,columnName_2)
   ...
);

**注意:**不能在sqlite中向现有表添加约束条件。只能重命名表或向表添加列。

相关问题