我的实体模型中有一个User实体:
用户名和电子邮件应该是唯一的,但目前EF4不支持此功能.
所以我写了这段代码以确保唯一性:
public void CreateNewUser(string i_UserName, string i_Email)
{
using (ModelContainer context = new ModelContainer())
{
User usr;
usr = context.UserSet.Where(u => u.Username == i_UserName).SingleOrDefault();
if (usr != null)
throw new Exception("Username not unique");
usr = context.UserSet.Where(u => u.Email == i_Email).SingleOrDefault();
if (usr != null)
throw new Exception("Email not unique");
context.UserSet.AddObject(new User() { Username = i_UserName, Email = i_Email });
context.SaveChanges();
}
}
Run Code Online (Sandbox Code Playgroud)
如果这是正确的方法,我是否有办法在context.UserSet.AddObject()调用时自动执行此代码?或者确实存在更优雅的方式?
.net c# entity-framework unique-constraint entity-framework-4
我被分配到在具有两个表的应用程序的工作,让我们给他们打电话MY_TABLE_ONE和MY_TABLE_TWO.当用户在表单中输入数据时,将输入数据MY_TABLE_ONE.完成此操作后,将触发数据库包,基本上执行以下操作:
DELETE FROM MY_TABLE_TWO;
INSERT INTO MY_TABLE_TWO
mto.COLUMN_ONE,
moto.COLUMN_TWO,
mott.COLUMN_THREE
FROM MY_TABLE_ONE mto, MY_OTHER_TABLE_ONE moto, MY_OTHER_TABLE_TWO mott
WHERE mto.OTHER_TABLE_ONE_UUID = moto.UUID
AND mto.OTHER_TABLE_TWO_UUID = mott.UUID;
Run Code Online (Sandbox Code Playgroud)
出于某种原因,这个包开始在插入时失败,并带有以下消息:
ORA-00001: unique constraint
(MY_SCHEMA.MY_TABLE_TWO_UK01) violated
ORA-06512: at "MY_SCHEMA.MY_PACKAGE", line 2
ORA-06512: at line 1
Run Code Online (Sandbox Code Playgroud)
查看约束MY_TABLE_TWO,没有MY_TABLE_TWO_UK01约束.但是有一个MY_TABLE_TWO_UK约束要求3个插入的列是唯一的.但是,如果我运行以下查询:
SELECT mto.COLUMN_ONE, moto.COLUMN_TWO, mott.COLUMN_THREE, COUNT(*) AS COUNTER
FROM MY_TABLE_ONE mto, MY_OTHER_TABLE_ONE moto, MY_OTHER_TABLE_TWO mott
WHERE mto.OTHER_TABLE_ONE_UUID = moto.UUID
AND mto.OTHER_TABLE_TWO_UUID = mott.UUID
GROUP BY mto.COLUMN_ONE, moto.COLUMN_TWO, mott.COLUMN_THREE …Run Code Online (Sandbox Code Playgroud) 在SQL Server数据库中,我创建了一个唯一约束,以确保其中一个表只包含唯一的值对.
现在的问题是我得到的记录顺序是不同的.记录是按顺序排序的,但我希望它们按原始顺序排列,就像它们存在于表中一样,没有任何排序.
我已经到处检查过,但是找不到一种方法来创建一个没有排序顺序的唯一约束.这支持了吗?
我正在尝试将一些数据插入到名为的表中rmas.
表格式是
|rcode|rname|vcode|vanme
Run Code Online (Sandbox Code Playgroud)
在这里,我为rcode设置了主键.
当我用现有的rcode插入记录时,它会显示类似于ORA-0000-1唯一约束违反的内容.
如果我使用以下代码,即使出现其他错误,也会显示该消息.
catch(Exception e)
{
//out.println("rcode already exists");
}
Run Code Online (Sandbox Code Playgroud)
所以,我想只捕获主键异常并显示为"rcode已存在".可能吗?如果是,那怎么样?
提前致谢
有人可以帮我吗?
id | Name
--------
1 | aaa
2 | bbb
3 | aaa
>alter table arc add CONSTRAINT uk_arc UNIQUE (NAME) novalidate
error :ora-02299: cannot validate( .uk_arc ) - duplicate keys found
Run Code Online (Sandbox Code Playgroud)
我使用novalidate忽略旧的重复并开始重新验证.
我想将UniqueConstraint与flask_sqlalchemy一起使用
不幸的是,这个进口声明:
from flask_sqlalchemy import SQLAlchemy, UniqueConstraint
Run Code Online (Sandbox Code Playgroud)
产生这个错误;
ImportError: cannot import name UniqueConstraint
Run Code Online (Sandbox Code Playgroud)
将UniqueConstraint导入flask_sqlalchemy应用程序的正确语法是什么?
谢谢!
我想知道是否有一种简单的方法可以检查INSERT语句是否在执行INSERT时由于MySQL字段上的唯一索引而触发冲突.
例如,假设我正在向数据库添加用户,并且username是一个唯一索引:
$sql = new MySQLi(...);
$res = $sql->query('INSERT INTO `users` (`username`) VALUES ("john_galt");');
Run Code Online (Sandbox Code Playgroud)
名为的用户john_galt已存在,因此不会执行INSERT.但是,如何才能以最有意义的错误对用户做出最佳响应(即具有该用户名的用户已经存在;请选择一个唯一的名称.)?
我想到了一些事情,比如检查是否insert_id已设置 - 如果查询生成错误,则不应该这样做.但这个错误可能是任何事情.
类似地,我可以检查是否$sql->error不是空的,除了,这可能是任何东西 - 语法错误,或格式错误的值,或其他什么.显然,我不打算为最终用户打印出实际的MySQL错误.
我能想到的两个解决方案是:
SELECT TRUE FROM ``users`` WHERE ``username`` = "john_galt";以查看数据库中是否已存在用户名,但我觉得我在该字段中添加了一个唯一约束,这样我就不必这样做了 - 否则就会失败.strpos($sql->error, 'Duplicate entry') === 0 - 看起来非常可怕.有没有更好的方法来确定使用PHP的MySQLi类?
这可以标记为重复但我在两个varchar字段上对Create Unqiue不区分大小写的约束时发现问题
我有一个表std_tbl,其中一列中有一些重复记录,如Column_One.
我在该列上创建了一个唯一约束
ALTER TABLE std_tbl
ADD CONSTRAINT Unq_Column_One
UNIQUE (Column_One) ENABLE NOVALIDATE;
Run Code Online (Sandbox Code Playgroud)
我使用了ENABLE NOVALIDATE,因为我想保留现有的重复记录并验证重复的未来记录.
但是在这里,constaint不会查找区分大小写的单词,比如Column_One的值是'abcd',它允许'Abcd'和'ABCD'插入表中.
我希望此行为不区分大小写,以便在验证数据时不应查找大小写.为此我想出了这个解决方案.
CREATE UNIQUE INDEX Unq_Column_One_indx ON std_tbl (LOWER(Column_One));
Run Code Online (Sandbox Code Playgroud)
但它给了我错误:
ORA-01452:无法创建独特的索引; 找到重复的密钥
请帮帮我...
PostgreSQL旅馆我想要一个多列UNIQUE约束,其中的一列可以完全为NULL。
到目前为止,我已经尝试过:
ALTER TABLE customexternalemail
ADD CONSTRAINT customexternalemail_sp_emaildomain_unique
UNIQUE(serviceproviderid, emailprefix, emaildomainid);
Run Code Online (Sandbox Code Playgroud)
其中serviceproviderid和emaildomainid是BIGINT,并且emailprefix是TEXT。emaildomainid是唯一允许使用NULL的列,也是我遇到问题的列。
基本上,我想只允许一个项目相匹配的组合serviceproviderid,emailprefix以及emaildomainid,在那里emaildomainid可能是一个BIGINT值或NULL。当前(具有上述约束),如果emaildomainid为NULL,它将接受重复,但是如果emaildomainid不为NULL,则它必须是唯一的。
我有一个Student在组合键上具有唯一性的表[Name, Status]。我可以将特定学生标记为已删除,但稍后可以将其注册。基本上,我可以有多个具有相同名称和Deleted状态的条目。但是,如果我应用唯一约束,那么它将不允许我这样做。
因此,我创建了一个接受名称和状态的新函数。如果状态被删除,则返回true,如果不是已删除,则返回记录数。
内部检查中,我正在检查返回的值是否小于1,然后才允许重新插入。当我调用此函数时,它会显示正确的结果,但CHECK无法施加约束。
记录
ID Name Status
-------------------
1 Ram Deleted
1 Ram Deleted
2 Sham Active
2 Sham Deleted
Run Code Online (Sandbox Code Playgroud)
我可以插入记录
2 Sham Deleted
Run Code Online (Sandbox Code Playgroud)
但这不应该
2 Sham Active
Run Code Online (Sandbox Code Playgroud)
提前致谢
oracle ×3
c# ×2
database ×2
sql-server ×2
.net ×1
constraints ×1
exception ×1
flask ×1
java ×1
mysql ×1
mysqli ×1
oracle10g ×1
php ×1
postgresql ×1
servlets ×1
sql ×1
sqlalchemy ×1