0

我有麻烦看到我需要更正或添加到我的控制器为了将我的数据保存到数据库。看到下面我到目前为止。无法将对象和子对象保存到数据库?

创建方法

[HttpPost] 
    public ActionResult Create(Team model) 
    { 
     if (ModelState.IsValid) 
     { 
      new Team 
       { 
        Name = model.Name, 
        Division = model.Division, 
        Description = model.Description, 

        TeamContact = new TeamContact 
             { 
              EmailAddress = model.TeamContact.EmailAddress, 
              PhoneNumber = model.TeamContact.PhoneNumber, 

              TeamAddress = new TeamAddress 
                  { 
                   Box = model.TeamContact.TeamAddress.Box, 
                   StreetName = model.TeamContact.TeamAddress.StreetName, 
                   StreetNumber = model.TeamContact.TeamAddress.StreetNumber, 
                   City = model.TeamContact.TeamAddress.City, 
                   PostalCode = model.TeamContact.TeamAddress.PostalCode, 
                   Province = model.TeamContact.TeamAddress.Province 
                  } 
            } 
       }; 
       _dataSource.Save(); 
     } 

     return View(model); 

表关系

-Team one-to-one TeamContact 
-TeamContact one-to-on TeamAddress 

接口的IDataSource

IQueryable<Team> Teams { get; }   
    IQueryable<TeamAddress> TeamAddresses { get; } 
    IQueryable<TeamContact> TeamContacts { get; } 
    void Save(); 

Context类

public DbSet<Team> Teams { get; set; }   
    IQueryable<Team> IDataSource.Teams 
    { 
     get { return Teams; } 
    } 

    public DbSet<TeamAddress> TeamAddresses { get; set; } 
    IQueryable<TeamAddress> IDataSource.TeamAddresses 
    { 
     get { return TeamAddresses; } 
    } 

    public DbSet<TeamContact> TeamContacts { get; set; } 
    IQueryable<TeamContact> IDataSource.TeamContacts 
    { 
     get { return TeamContacts; } 
    } 

    public void Save() 
    { 
     SaveChanges(); 
    } 

缺少什么我有我的数据保存到数据库?

+0

我不看你怎么添加新实体的背景下 - 像'_dataSource.Teams.Add(队)' – Pawel

+0

@Pawel'添加()'是的ICollection的方法,并会工作,如果实体团队在另一个实体中拥有Icollection属性。例如:'public virtual ICollection Team {get;组; }'当我为团队实体正在收集的Player实体编写一个create方法时,您的建议将会起作用。 – Komengem

+2

我正在谈论'DbSet 团队'上暴露的'Add()' - 如果不添加DbContext应该如何知道这个对象?唯一的另一种方法是添加一个引用你创建的新Team实体的实体,但是在你的代码中没有看到类似的东西。 – Pawel

回答

1

您的控制器中没有任何代码,实际上是将Team添加到您的数据库中。现在,您只需在内存中创建一个新的Team对象,并将更改保存到数据库中。实际上没有任何数据被添加到数据库中进行保存。

Team team = new Team 
       { 
        .. the rest of your model building code here .. 
       }; 

_dataSource.Teams.Add(team); // This adds the Team entity to the database 
_dataSource.Save(); 
+0

我试过了。 'Add()'是ICollection的一种方法,如果实体Team在另一个实体中有一个Icollection属性,就可以工作。例如:'public virtual ICollection Team {get;组; }'当我为团队实体收集的Player实体编写创建方法时,您的建议将起作用 – Komengem

+0

@KomengeMwandila'Add()'也是'DbSet'的一种方法。请参阅[这里的MSDN文档](http://msdn.microsoft.com/en-us/library/system.data.entity.dbset.add(v = vs.103).aspx)。 – HTX9

+0

关于我如何实现该小节的任何想法。我没有运气,我已经尝试过,除非我更改我的存储库设置? – Komengem