C# 自动更新实体框架中的实体

C# 自动更新实体框架中的实体,c#,entity-framework,entity,C#,Entity Framework,Entity,我有一个简单的数据库,我使用实体框架执行查询 Customer.cs namespace DataAccess.Entities { [Table("Customer")] public partial class Customer { public int CustomerId { get; set; } [Required] [StringLength(50)] public string Custom

我有一个简单的数据库,我使用
实体框架
执行查询

Customer.cs

namespace DataAccess.Entities
{
    [Table("Customer")]
    public partial class Customer
    {
        public int CustomerId { get; set; }

        [Required]
        [StringLength(50)]
        public string CustomerName { get; set; }

        public int StatusId { get; set; }

        public virtual Status Status { get; set; }
     }
}
public partial class Context : DbContext
{
    public Context()
        : base("name=DefaultConnection")
    {
    }

    public virtual DbSet<Customer> Customer { get; set; }
    public virtual DbSet<Status> Status { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Customer>()
            .Property(e => e.CustomerName)
            .IsUnicode(false);

        modelBuilder.Entity<Status>()
            .HasMany(e => e.Customer)
            .WithRequired(e => e.Status)
            .WillCascadeOnDelete(false);
    }
}
Context.cs

namespace DataAccess.Entities
{
    [Table("Customer")]
    public partial class Customer
    {
        public int CustomerId { get; set; }

        [Required]
        [StringLength(50)]
        public string CustomerName { get; set; }

        public int StatusId { get; set; }

        public virtual Status Status { get; set; }
     }
}
public partial class Context : DbContext
{
    public Context()
        : base("name=DefaultConnection")
    {
    }

    public virtual DbSet<Customer> Customer { get; set; }
    public virtual DbSet<Status> Status { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Customer>()
            .Property(e => e.CustomerName)
            .IsUnicode(false);

        modelBuilder.Entity<Status>()
            .HasMany(e => e.Customer)
            .WithRequired(e => e.Status)
            .WillCascadeOnDelete(false);
    }
}
公共部分类上下文:DbContext
{
公共上下文()
:base(“name=DefaultConnection”)
{
}
公共虚拟数据库集客户{get;set;}
公共虚拟数据库集状态{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.Property(e=>e.CustomerName)
.IsUnicode(假);
modelBuilder.Entity()
.HasMany(e=>e.Customer)
.WithRequired(e=>e.Status)
.WillCascadeOnDelete(假);
}
}
但是如果我的数据库发生更改,如何更新我的实体和
OnModelCreating
方法?如果没有,请手动执行此操作


Thank’s

只要您使用“代码优先”的方法,对DB的每一个更改都应该通过模型来完成,因此您不应该处理您所述的问题,您可以假设DB结构与模型匹配

如果您使用的是Asp.Net MVC,您可以在Package Manager控制台中使用迁移,如下所示

  • 启用迁移
  • 添加迁移初始模型
  • 更新数据库
  • 对于默认数据/枚举,应使用种子设定。用于在包管理器控制台中进行种子设定

  • 添加迁移
  • 将打开名为PopulateStatus的分部类,在up()方法中,您应该编写SQl命令以插入默认数据。在您的情况下,它的状态表。然后在包管理器中更新数据库命令

  • 更新数据库

  • 为了更好地理解,您可以查看

    您所说的“我的数据库更改”是什么意思?it中的数据或体系结构(列、约束等)?您好,体系结构不是更改DB体系结构的触发器是模型吗?我的意思是,要改变架构,你需要改变你的模型,你不应该从数据库本身开始,你是使用代码优先还是数据库优先?从发布的代码来看,这似乎是代码优先的方法?好的,所以我必须使用迁移来推动我的更改?不,这是一个WCF项目。但我有一个sql server项目。我部署Dacpac用于更新数据库的体系结构Hi Azerty123,如果安装了entityframework/引用了该项目,您也可以在WCF项目中使用相同的方法。但是我想保留我的其他项目,并使用Dacpac管理数据库。我不想在我的WCF项目中使用迁移,也不想使用edmx更新我的实体