2011-09-26 114 views
-7

我想阻止同一用户自动添加到数据库中。我想检查这与我的数据库中设置的FacebookID字段/列对照。我将如何做到这一点?下面是代码:如果其他人如果和else语句使用防止将重复的用户添加到数据库中

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using MVCFacebookTestApp.Models; 
using Facebook; 
using Facebook.Web; 


namespace MVCFacebookTestApp.Controllers 
{ 
    public class HomeController : Controller 
    { 

     public FacebookSession FacebookSession 
     { 
      get { return (FacebookWebContext.Current.Session); } 
     } 
     public ActionResult Index() 
     { 
      string request = Request.Form["signed_request"]; 

      string accessToken = ""; 

      if (Request.Form["access_token"] != null) 
      { 
       accessToken = Request.Form["access_token"]; 
      } 

      FacebookApplication app = new FacebookApplication(); 

      FacebookSignedRequest result = FacebookSignedRequest.Parse(app.InnerCurrent, request); 

      if (String.IsNullOrWhiteSpace(accessToken)) 
      { 
       accessToken = result.AccessToken; 
      } 

      dynamic data = result.Data; 

      bool liked = data.page.liked; 
      //bool liked = true; 

      if (!liked) 
      { 
       Home h = Home.NotLiked(); 
       return View(h); 
      } 
      else 
      { 
       Home h = Home.Liked(); 

       FacebookWebClient fb = null; 

       if (String.IsNullOrWhiteSpace(accessToken)) 
       { 
        var fbRequest = FacebookWebContext.Current; 
        if (fbRequest.IsAuthorized()) 
         fb = new FacebookWebClient(fbRequest); 

        accessToken = fbRequest.AccessToken; 
       } 
       else 
       { 
        fb = new FacebookWebClient(accessToken); 
       } 

       if (fb != null) 
       { 

        dynamic r = fb.Get("/me"); 

        //h.TestString2 += " Ha! We captured this data about you!"; 

        //h.TestString2 += " Name: " + r.name; 

        //h.TestString2 += " Location: " + r.location; 

        //h.TestString2 += " Birthday: " + r.birthday; 

        //h.TestString2 += " About Me: " + r.aboutme; 

        //h.ImgUrl = "http://graph.facebook.com/" + r.id + "/picture?type=large"; 

        //string fqlResult = ""; 
        //var fbApp = new FacebookClient(accessToken); 

        //basic fql query execution 
        //dynamic friends = fbApp.Query("SELECT uid FROM page_admin WHERE page_id='160828267335555'"); 

        //SELECT uid FROM page_fan WHERE page_id = 160828267335555 

        //"SELECT uid FROM page_fan WHERE uid=me() AND page_id=<your page id>"; 

        //loop through all friends and get their name and create response containing friends' name and profile picture 
        //foreach (dynamic friend in friends) 
        //{ 
        // fqlResult += friend.uid + ".... "; 
        // //fqlResult += friend.name + "<img src='" + friend.pic_square + "' alt='" + friend.name + "' /><br />"; 
        //} 

        h.AddUser(r.id, accessToken, r.first_name, r.last_name, DateTime.ParseExact(r.birthday, "MM/dd/yyyy", new System.Globalization.CultureInfo("en-GB")), r.email, DateTime.Now, r.gender, "http://graph.facebook.com/" + r.id + "/picture?type=large"); 

        //ViewBag.Likes = fqlResult; 
       } 
       else 
       { 
        //Display a message saying not authed.... 
       } 

       // if statement to stop same user from being added to the database... 

       if() 
       { 
        //condition here 
       } 
       else 
       { 
        //condition here 
       } 


       return View(h); 

      } 
     } 
    } 
} 

目前这种方式我想它。

var User = SELECT from User WHERE FBID = FBID(); 
        if (User.Count==0) 
        { 
        User.AddUser(facebookID as string, accessToken as string, fName as  string, lName as string, dob as DateTime, email as string, dateLiked as DateTime, gender as string, imageURL as string); //Create newUser 
         } 
        else if (User.Count ==1) 
        { 
         //set properties to User[0] 
        } 
       else 
        { 
         // THROW EXCEPTION 
        } 

这些都是我对我创建的数据库的属性;

//public string UserID { get; set; } 
    public string FBID { get; set; } 
    public string AccessToken { get; set; } 
    public string FName { get; set; } 
    public string LName { get; set; } 
    public string Gender { get; set; } 
    public DateTime DOB { get; set; } 
    public string Email { get; set; } 
    public DateTime DateLiked { get; set; } 
    public string ImageURL { get; set; } 
    //public string TestString { get; set; } 
    //public string TestString2 { get; set; } 
    public bool IsLiked { get; set; } 
    //public string ImgUrl { get; set; } 

public void AddUser (string facebookID, string accessToken, string fName, string lName, DateTime dob, string email, DateTime dateLiked, string gender, string imageURL) 
    { 

     //UserID = userID; 
     FBID = facebookID; 
     AccessToken = accessToken; 
     FName = fName; 
     LName = lName; 
     DOB = dob; 
     Email = email; 
     DateLiked = dateLiked; 
     Gender = gender; 
     ImageURL = imageURL; 


     User newUser = new User(); 
     Entities newContext = new Entities(); 

     //newUser.UserID = 1; 
     newUser.FacebookID = facebookID; 
     newUser.AccessToken = accessToken; 
     newUser.FName = fName; 
     newUser.LName = lName; 
     newUser.Gender = gender; 
     newUser.DOB = DOB; 
     newUser.Email = email; 
     newUser.DateLiked = dateLiked; 
     newUser.ImageURL = imageURL; 

     newContext.Users.AddObject(newUser); 
     newContext.SaveChanges(); 
    } 
} 
} 

我希望这是有道理的,新手在这里这样下去容易在我身上。 =)

+0

请尝试一些事情或告诉我们你的尝试....所以我们可以提供帮助。 – loxxy

+0

当你甚至没有告诉我们你正在使用哪个数据库时,我们很难回答与数据库相关的问题。 – LukeH

+0

数据库是由我自己设置的。我该如何在这里向你展示一个数据库? –

回答

4

为了保护您的数据库的完整性,您应该添加唯一约束要在数据库中该列,然后违反这一约束的catch the exception执行UPDATE/INSERT查询时。