Zab*_*sky 0 c# performance linq-to-entities entity-framework
我有这样的表在我的数据库一样Customer,Member,Instructor,Employee等每个用户都有自己的电子邮件adrress.我需要检查是否已有用户使用给定的电子邮件.我在考虑:
public bool IsEmailAddressExists(string email)
{
if (!Context.Customers.Any(c => string.Equals(c.Email, email, StringComparison.InvariantCultureIgnoreCase)))
if (!Context.Members.Any(m => string.Equals(m.Email, email, StringComparison.InvariantCultureIgnoreCase)))
...
}
Run Code Online (Sandbox Code Playgroud)
public bool IsEmailAddressExists(string email)
{
var emails = Context.Customers.Select(c => c.Email).Union(Context.Members.Select(m => m.Email))...; //other unions
return emails.Any(e => string.Equals(e, email, StringComparison.InvariantCultureIgnoreCase));
}
Run Code Online (Sandbox Code Playgroud)
有更多的表和许多用户,所以我想知道实现这种检查的最有效方法是什么.
谢谢.
听起来你有几个选择.
创建一个视图. 您可以在数据库中创建一个仅显示电子邮件地址的视图.假设您正在使用MSSQL Server,例如:
CREATE VIEW EmailView AS
SELECT Email from Customers
UNION ALL
SELECT Email from Instructors
....
Run Code Online (Sandbox Code Playgroud)
...然后使用绑定到该视图的实体,以便您可以检查电子邮件列表以查看该电子邮件是否已存在.查看文档以获取更多信息.
规范化您的数据库. 这些表中的每一个是否共享除电子邮件之外的共同信息,例如,名字和/或姓氏?您可能值得花时间重新组织数据模型以将该信息放在"人员"表中,然后将其他表外键键入其中.(如果您的用户是两个不同的东西,比如客户和教师,这也会有所帮助.)
| 归档时间: |
|
| 查看次数: |
1556 次 |
| 最近记录: |