2016-04-18 10 views
2

重複するエントリを防止したいと考えています。メールアドレスがすでに存在する場合、私は、「電子メールアドレスが既にデータベース内に存在する」のようなものを言ってメッセージを表示したい重複した電子メールアドレスがデータベースへの入力を防止する

ここでは私の私のCustomerController内のメソッドを作成します:

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Create([Bind(Include = "LastName,FirstName,EnrollmentDate,Email")] Customer customer) 
{ 
    try 
    { 
     if (ModelState.IsValid) 
     { 
      db.Customers.Add(customer); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
    } 
    catch (DataException) 
    { 
     ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists see your system administrator."); 
    } 

    return View(customer); 
} 

は、どのように私は行くだろうが電子メールアドレスがすでにデータベースに存在するかどうかを確認するチェックを追加しますか?

+3

はあなたのクライアント側の検証を与えるために、 'RemoteAttribute'の使用を検討して、あなたのマッピングであります.com/ja-us/library/gg508808(VS.98).aspx)。しかし、サーバー側の検証だけをしたい場合は、一致するかどうかを確認するためにデータベースを照会し、 –

答えて

2

保存する前に、特定のメールアドレスの顧客がいるかどうかを確認することができます。

var customer = db.Customers.FirstOrDefault(x => x.EmailAddress == Email); 

if (customer == null) 
{ 
    // save changes 
} 

または、これを一意の制約によってデータベースで処理します。例外を捕捉して処理することができます。既存のテーブルにUNIQUE制約を適用する場合

USE TestDB; 
GO 
CREATE TABLE Users 
(
    UserID int NOT NULL IDENTITY(1,1), 
    Name varchar(100) NOT NULL, 
    Surname varchar(100) NOT NULL, 
    EmailAddress varchar(100) NOT NULL, 
    CONSTRAINT AK_UnqueEmail UNIQUE(EmailAddress) 
); 
GO 

あなたは以下のようにコードを構造化します:

USE TestDB; 
GO 
ALTER TABLE Users 
ADD CONSTRAINT AK_UniqueEmail UNIQUE (EmailAddress); 
GO 

REF:あなたがいないので、あなたのモデルを更新できhttps://lgitsmart.com/2014/10/18/sql-server-tip-preventing-duplicate-records-using-the-unique-constraint/

+5

がある場合は 'ModelStateError'を追加する必要があります。どの方法を選択するかにかかわらず、重複を防ぐ。 – DavidG

+0

@DavidG優秀な点。 –

1

すでに使用されているかどうかを確認する必要があります。

using System.ComponentModel.DataAnnotations.Schema; 

public class Customer 
{ 
    ..... {get; set;} 
    ..... {get; set;} 
    //String Length = 450 will avoid error if string is set to max 
    [StringLength(450)] 
    [Index(IsUnique=true)] 
    public string Email{get;set;} 
} 

https://msdn.microsoft(:[ASP.NET MVCでのリモート検証を実装する方法](あなたは流暢なを使用している場合)

public class CustomerMap : EntityTypeConfiguration<Customer> 
    { 
    public CustomerMap() 
    { 
     // .... 
     Property(x => x.Email).IsRequired().HasMaxLength(450).HasColumnAnnotation("Index", new IndexAnnotation(new[] { new IndexAttribute("Index") { IsUnique = true } })); 
    } 
    } 
+0

はい、私は、EFコアで同じことをしていたことに同意しました。それは、まだ利用可能なデータアノテーションがないことです。 Ref:https://docs.microsoft.com/en-us/ef/core/modeling/relational/unique-constraints –

関連する問題