私は c# と MVC にはかなり慣れていませんが、イントラネット アプリを構築しています。内部ネットワーク上にあるため、アプリを使用するためにサインインする必要はありませんが、「管理」テーブルを持つデータベースに接続しています。この表は、管理者の電子メール アドレスです。また、System.DirectoryServices.AccountManagementとUserPrincipal.Current.EmailAddressを使用して、ユーザーの電子メール アドレスを取得しています。私がしたいのは、UserPrincipal.Current.EmailAddressをデータベース テーブルと比較し、一致する場合はブール値を TRUE に設定して、サイト全体で参照/呼び出しできるようにすることです。
データベース テーブルに一致するモデルがあり、where ステートメントを使用してUserPrincipal.Current.EmailAddressの値に対してデータベースをクエリすることもできますが、set メソッド (ActionResult) 内でのみ実行でき、viewbag 内のブール値をその特定のコントローラーに返すことができます。関連するビューのみがアクセスします。
ユーザーがメールにアクセスしたページがデータベースと比較され、データベース管理者テーブルに含まれている/含まれていない場合はブール値が true/false に設定されるように、サイトを設定するためのベスト プラクティスを知りたいです。
編集:これは、ベースコントローラーを作成し、それを他のすべてのコントローラーに継承し、ベースコントローラー内でデータベースクエリを実行することでしょうか-そうであれば、少しのガイダンスが大いに適用されます
私の現在の設定は EmailEntityModel です:
using System;
using System.Data.Entity;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
public partial class EmailEntities : DbContext
{
public EmailEntities()
: base("name=EmailEntities")
{
}
public virtual DbSet<Audience> Audiences { get; set; }
public virtual DbSet<CallToAction> CallToActions { get; set; }
public virtual DbSet<ColourScheme> ColourSchemes { get; set; }
public virtual DbSet<Email> Emails { get; set; }
public virtual DbSet<EmailType> EmailTypes { get; set; }
public virtual DbSet<Administrator> Administrators { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
}
}
それから私は電子メールコントローラを持っています:
public class EmailsController : Controller
{
private EmailEntities db = new EmailEntities();
public ActionResult Index()
{
return View(db.Emails.ToList());
}
コントローラ内で EmailEntities を使用して管理者 DBset をクエリできますが、これを別の場所で使用できますか?