0

Simple Membership と、UserId と UserName を保持する UserProfile テーブルを使用しています。

 public partial class UserProfile
    {
        public UserProfile()
        {
            this.webpages_Roles = new List<webpages_Roles>();
        }

        public int UserId { get; set; }
        public string UserName { get; set; }
        public virtual ICollection<webpages_Roles> webpages_Roles { get; set; }
    }

Entity Frameworkを使用して、コンテキスト内にある次を実行しています:

 public partial class UowContext : DbContext

    // code to set up DbSets here ...
    public DbSet<Content> Contents { get; set; }

    private void ApplyRules()
    {
        var r1 = new Random();
        var r2 = new Random();

        foreach (var entry in this.ChangeTracker.Entries()
                     .Where(
                          e => e.Entity is IAuditableTable &&
                         (e.State == EntityState.Added) ||
                         (e.State == EntityState.Modified)))
        {
            IAuditableTable e = (IAuditableTable)entry.Entity;
            if (entry.State == EntityState.Added)
            {
                e.CreatedBy = // I want to put the integer value of UserId here
                e.CreatedDate = DateTime.Now;
            }
            e.ModifiedBy = // I want to put the integer value of UserId here
            e.ModifiedDate = DateTime.Now;
        }
    }

ユーザー情報の格納方法を示すスキーマを次に示します。テーブルに UserName ではなく、整数の UserId を格納することに注意してください。

public abstract class AuditableTable : IAuditableTable
{
    public virtual byte[] Version { get; set; }
    public int CreatedBy { get; set; }
    public DateTime CreatedDate { get; set; }
    public int ModifiedBy { get; set; }
    public DateTime ModifiedDate { get; set; }
}

私が使用するコントローラ アクションの例を次に示します。

public HttpResponseMessage PostContent(Content content)
    {
        try
        {
            _uow.Contents.Add(content);
            _uow.Commit();
            var response = Request.CreateResponse<Content>(HttpStatusCode.Created, content);
            return response;
        }
        catch (DbUpdateException ex)
        {
            return Request.CreateErrorResponse(HttpStatusCode.Conflict, ex);
        } 
    }

私はそれから持っています:

public class UowBase : IUow, IDisposable
{
    public UowBase(IRepositoryProvider repositoryProvider)
    {
        CreateDbContext();

        repositoryProvider.DbContext = DbContext;
        RepositoryProvider = repositoryProvider;
    }

    public IRepository<Content> Contents { get { return GetStandardRepo<Content>(); } }

と:

public class GenericRepository<T> : IRepository<T> where T : class
{
    public GenericRepository(DbContext dbContext)
    {
        if (dbContext == null) 
            throw new ArgumentNullException("An instance of DbContext is required to use this repository", "context");
        DbContext = dbContext;
        DbSet = DbContext.Set<T>();
    }

    public virtual void Add(T entity)
    {
        DbEntityEntry dbEntityEntry = DbContext.Entry(entity);
        if (dbEntityEntry.State != EntityState.Detached)
        {
            dbEntityEntry.State = EntityState.Added;
        }
        else
        {
            DbSet.Add(entity);
        }
    }

テーブルに ID を設定できるように、コンテキスト内から UserId を特定するにはどうすればよいですか?

4

1 に答える 1