【问题标题】:Multiple Parent models for a child model子模型的多个父模型
【发布时间】:2012-04-23 16:30:36
【问题描述】:

我正在使用 Entity Framework 4 和 C# 创建一个 MVC3 asp.net 应用程序。

我尝试阅读有关 EF 和模型绑定、延迟加载等方面的内容。但我遇到了障碍。

我有一个用户模型。 Store 和 UserType 模型可以有一个用户的 ICollection。当我使用 Create Action 添加用户时,如何指定多个父级?

我想我只知道如果有一个父母,我该怎么添加。

我的模特:

 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; }
}

这是我的数据库上下文:

    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)

实体框架如何知道用户有另一个父级??? ...我关心的?

我的直觉是我应该以不同的方式来做这件事,更具体、更准确。

【问题讨论】:

  • 不要在主题标题中包含关键字,这就是标签的用途。
  • 这称为polymorphic associations。也许这会给你一个提示,哪种方法最适合你。

标签: asp.net-mvc-3 entity-framework foreign-keys lazy-loading model-binding


【解决方案1】:

在这种情况下,您可能希望将用户添加到用户表,而不是商店。然后在提交之前将 StoreID 和 UserTypeID 分配给用户。

您似乎已经在您的 UI 中设置了 StoreID,您是否也在为 UserType 做同样的事情?如果是这样,那么只需将用户添加到用户表中就可以了。

【讨论】:

  • 所以听起来只要我在用户模型的UI表单中填充StoreID和UserTypeID,那么我的外键将被正确设置并且不需要指定父级(无论是Store或 UserType) 在创建操作中?
  • @Mattbob - 这通常是它的工作原理,是的。但是,请注意不要覆盖您的商店类型。我不确定你在哪里设置这些。
  • 我假设这意味着我需要在 User 模型上将 StoreID 和 UserTypeID 指定为 {Foreign Key]。凉爽的。障碍物成功导航。
猜你喜欢
  • 2016-11-06
  • 1970-01-01
  • 2021-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-05
  • 1970-01-01
  • 2012-01-22
相关资源
最近更新 更多