1

Entity Framework 4とC#を使用してMVC3asp.netアプリケーションを作成しています。

EFとモデルのバインド、遅延読み込みなどについて調べてみましたが、障害にぶつかりました。

ユーザーモデルがあります。StoreモデルとUserTypeモデルには、ユーザーのICollectionを含めることができます。作成アクションでユーザーを追加する場合、複数の親を指定するにはどうすればよいですか?

親が1人の場合にしか追加できないと思います。

私のモデル:

 public class UserType
{
    public virtual int ID { get; set; }
    public virtual string UserTypeName { get; set; }
    public virtual ICollection<User> Users { get; set; }
}

public class Store
{
    public virtual int ID { get; set; }
    public virtual string StoreName { get; set; }
    public virtual Address StoreAddress { get; set; }
    public virtual ICollection<Workroom> Workrooms { get; set;}
    public virtual ICollection<User> Users { get; set; }
}

    public class User
{
    public virtual int ID { get; set; }
    public virtual string Username { get; set; }
    public virtual string Email { get; set; }
    public virtual Store Store { get; set; }
    public virtual UserType UserType { get; set; }
}

これが私のdbコンテキストです:

    public DbSet<Workroom> Workrooms { get; set; }
    public DbSet<Ticket> Tickets { get; set; }
    public DbSet<Customer> Customers { get; set; }
    public DbSet<Store> Stores { get; set; }
    public DbSet<User> Users { get; set; }
    public DbSet<UserType> UserTypes { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Store>()
            .HasMany(store => store.Workrooms)
            .WithRequired(workroom => workroom.Store);

        modelBuilder.Entity<Store>()
            .HasMany(store => store.Users)
            .WithRequired(user => user.Store);

        modelBuilder.Entity<UserType>()
            .HasMany(usertype => usertype.Users)
            .WithRequired(user => user.UserType);

        base.OnModelCreating(modelBuilder);
    }

これが私の作成アクションです:

    public ActionResult Create()
    {
        return View(new User());
    } 

    //
    // POST: /Users/Create

    [HttpPost]
    public ActionResult Create(User newUser)
    {
        try
        {
            int storeID = newUser.Store.ID;
            var store = _db.Stores.Single(r => r.ID == storeID);
            store.Users.Add(newUser);
            _db.SaveChanges();

            return RedirectToAction("Index");
        }
        catch (Exception ex)
        {
            ModelState.AddModelError("", ex.InnerException.Message);

            return View();
        }
    }

UserTypeに別の「追加」呼び出しを追加するだけですか?例:int userTypeID = newUser.UserType.ID var usertype = _db.UserTypes.Single(s => s.ID == userTypeID)

Entity Frameworkは、ユーザーに別の親があることをどのように認識しますか?...だから?

私の勘は、これを別の方法で、より具体的かつ正確に行う必要があるということです。

4

1 に答える 1

0

この場合、StoresではなくUsersテーブルにユーザーを追加することをお勧めします。次に、コミットする前に、StoreIDとUserTypeIDをユーザーに割り当てます。

UIですでにStoreIDを設定しているようですが、UserTypeでも同じことをしていますか?その場合は、usersテーブルにuserを追加するだけで、問題はありません。

于 2012-04-23T16:45:51.307 に答える