0

我无法弄清楚为什么我的数据库没有更新。它不断显示旧数据,如“user1”= mike,但“user2”=未知,而不是Tim。我所要做的就是将数据植入数据库,无需多余。为什么我的数据库没有在实体框架中更新?只是想要种子数据通过

感谢

namespace DatabaseDesign.DAL 
{ 
public class PrivateMessageInitializer : System.Data.Entity.DropCreateDatabaseAlways<PrivateMessageContext> //DropCreateDatabaseIfModelChanges<PrivateMessageContext> 
{ 
    protected override void Seed(PrivateMessageContext context) 
    { 

     var PrivateMessageHistory = new PrivateMessageHeader(); 
     var msgItems = new PrivateMessageDetail { FromUser="mike", MessageDate = DateTime.Now, Message="message 1", PrivateMessageDetailId = 1, PrivateMessageHeaderId = 1 }; 
     var msgItems2 = new PrivateMessageDetail { FromUser="mike", MessageDate = DateTime.Now, Message="message 2", PrivateMessageDetailId = 2, PrivateMessageHeaderId = 1 }; 
     var msgItems3 = new PrivateMessageDetail { FromUser="mike", MessageDate = DateTime.Now, Message="message 3", PrivateMessageDetailId = 3, PrivateMessageHeaderId = 1 }; 
     var msgItems4 = new PrivateMessageDetail { FromUser="mike", MessageDate = DateTime.Now, Message="message 4", PrivateMessageDetailId = 4, PrivateMessageHeaderId = 1 }; 
     var msgItems5 = new PrivateMessageDetail { FromUser = "mike", MessageDate = DateTime.Now, Message = "message 5", PrivateMessageDetailId = 5, PrivateMessageHeaderId = 1 }; 
     PrivateMessageHistory.Messages.Add(msgItems); 
     PrivateMessageHistory.Messages.Add(msgItems2); 
     PrivateMessageHistory.Messages.Add(msgItems3); 
     PrivateMessageHistory.Messages.Add(msgItems4); 
     PrivateMessageHistory.Messages.Add(msgItems5); 

     context.PrivateMessageHeader.Add(PrivateMessageHistory); 

     context.SaveChanges(); 

    } 
} 
} 

public class PrivateMessageContext : DbContext 
{ 
    public PrivateMessageContext() 
     : base("PrivateMessageContext") 
    { 

    } 
    public DbSet<PrivateMessageHeader> PrivateMessageHeader { get; set; } 
    public DbSet<PrivateMessageDetail> PrivateMessageDetail { get; set; } 


} 

namespace DatabaseDesign.Models 
{ 
public class PrivateMessageHeader 
{ 
    public int PrivateMessageHeaderId { get; set; } 
    public PrivateMessageHeader() { this.Messages = new List<PrivateMessageDetail>(); } 
    public DateTime TimeStamp { get; set; } // Date of the start of thread 
    public string User1 { get; set; } 
    public string User2 { get; set; } // this could be made to a list to allow multiples 

    public int numberOfMessages { get; set; } 
    public virtual ICollection<PrivateMessageDetail> Messages { get; set; } 
} 
} 

namespace DatabaseDesign.Models 
{ 
public class PrivateMessageDetail 
{ 
    public int PrivateMessageDetailId { get; set; } 
    public DateTime MessageDate { get; set; } 
    public string FromUser { get; set; } // Don't need ToUser, it's already in header 
    public string Message { get; set; } 

    public int PrivateMessageHeaderId { get; set; } 
    public virtual PrivateMessageHeader PrivateMessageHeader { get; set; } 
} 
} 

namespace DatabaseDesign.DAL 
{ 
public class PrivateMessageContext : DbContext 
{ 
    public PrivateMessageContext() 
     : base("PrivateMessageContext") 
    { 

    } 
    public DbSet<PrivateMessageHeader> PrivateMessageHeader { get; set; } 
    public DbSet<PrivateMessageDetail> PrivateMessageDetail { get; set; }  
} 
} 

的web.config:

<connectionStrings> 
<add name="PrivateMessageContext" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=PrivateMessageContext1;Integrated Security=SSPI;" providerName="System.Data.SqlClient"/> 
</connectionStrings> 

<entityFramework> 
    <contexts> 
     <context type="DatabaseDesign.DAL.PrivateMessageContext, DatabaseDesign"> 
     <databaseInitializer type="DatabaseDesign.DAL.PrivateMessageInitializer, DatabaseDesign" /> 
     </context> 
    </contexts> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="v11.0" /> 
     </parameters> 
    </defaultConnectionFactory> 
    <providers> 
     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
    </providers> 
     </entityFramework> 
+0

它无关,与你的EF设置;更重要的是要显示的是你正在运行的实际代码导致了这个问题......这些问题要么是EF上下文有缓存的对象,而是需要使用Refresh()方法刷新,或者对象isn没有正确更新,因为SaveChanges()没有被调用,或者类似的东西。 –

+0

你基本上拥有它。我实际上并没有调用控制器来做任何数据库更改:D *白痴*啊,进入我的下一个问题... – user2330270

+0

注*我叫我自己一个白痴! :) – user2330270

回答

0

您需要参考数据库,以便能够进行任何更改。我认为这是在启动时,但实际上你必须调用诸如控制器之类的东西来启动DB代码。

public class PrivateMessageController : Controller 
{ 
    private PrivateMessageContext db = new PrivateMessageContext(); 

    // GET: /PrivateMessage/ 
    public ActionResult Index() 
    { 
     var privatemessagedetail = db.PrivateMessageDetail.FirstOrDefault < PrivateMessageDetail>(); 
     return View(); 
    } 
} 
0

你的DbContext应该如下

public class PrivateMessageContext : DbContext 
{ 
    public PrivateMessageContext() 
     : base("PrivateMessageContext") 
    { 
     Database.SetInitializer(new PrivateMessageInitializer<PrivateMessageContext>()); 

    } 
    public DbSet<PrivateMessageHeader> PrivateMessageHeader { get; set; } 
    public DbSet<PrivateMessageDetail> PrivateMessageDetail { get; set; } 


} 
相关问题