Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 种子设定不适用于EF 4.1_Entity Framework_Entity Framework 4_Entity Framework 4.1 - Fatal编程技术网

Entity framework 种子设定不适用于EF 4.1

Entity framework 种子设定不适用于EF 4.1,entity-framework,entity-framework-4,entity-framework-4.1,Entity Framework,Entity Framework 4,Entity Framework 4.1,我在asp.net mvc教程的帮助下创建了以下代码。 它们在另一个类库中,我称之为Model。 我在类库中创建了一个app.config,其中包含名为HRContext的连接字符串。 同样在webproject上,我创建了相同的连接字符串 当我运行项目时,我放置了断点,并且Seed方法永远不会执行,但是OnModelCreating正在执行 我得到一个异常,表示表dbo.Position在视图中不存在 Exception Details: System.Data.SqlClient.SqlEx

我在asp.net mvc教程的帮助下创建了以下代码。 它们在另一个类库中,我称之为Model。 我在类库中创建了一个app.config,其中包含名为HRContext的连接字符串。 同样在webproject上,我创建了相同的连接字符串

当我运行项目时,我放置了断点,并且Seed方法永远不会执行,但是OnModelCreating正在执行

我得到一个异常,表示表dbo.Position在视图中不存在

Exception Details: System.Data.SqlClient.SqlException: Invalid object name 'dbo.Position'.



Line 21:             var positions = unitOfWork.PositionRepository.Find(p => p.PositionID != null);
Line 22: 
Line 23:             return View(positions.ToList());
Line 24:         }








 public class HRContextInitializer : DropCreateDatabaseAlways<HRContext>
    {
        protected override void Seed(HRContext context)
        {
            Position netdeveloper = new Position() { name = ".net developer", yearsExperienceRequired = 5 };
            Position javadeveloper = new Position() { name = "java developer", yearsExperienceRequired = 5 };

            byte[] johnImage = File.ReadAllBytes(@"\Content\Photos\1.jpg");
            byte[] luisImage = File.ReadAllBytes(@"\Content\Photos\2.jpg");

            Applicant luis = new Applicant()
            {
                name = "Luis",
                skypeuser = "le.valencia",
                telephone = "0491732825",
                photo = luisImage
            };

            Applicant john = new Applicant()
            {
                name = "John",
                skypeuser = "jo.valencia",
                telephone = "3435343543",
                photo = johnImage
            };


            ApplicantPosition appicantposition = new ApplicantPosition()
            {
                Applicant = luis,
                Position = netdeveloper,
                appliedDate = DateTime.Today,
                Status = Status.Applied
            };

            ApplicantPosition appicantposition2 = new ApplicantPosition()
            {
                Applicant = john,
                Position = javadeveloper,
                appliedDate = DateTime.Today,
                Status = Status.Applied
            };

            context.Positions.Add(netdeveloper);
            context.Positions.Add(javadeveloper);
            context.Applicants.Add(luis);
            context.Applicants.Add(john);
            context.ApplicantsPositions.Add(appicantposition);

            context.SaveChanges();
        }
    }




public class HRContext : DbContext
    {
        public DbSet<Position> Positions { get; set; }
        public DbSet<Applicant> Applicants { get; set; }
        public DbSet<ApplicantPosition> ApplicantsPositions { get; set; }
        public DbSet<ApplicationPositionHistory> ApplicationsPositionHistory { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Position>().ToTable("Position");
            modelBuilder.Entity<Applicant>().ToTable("Applicant");
            modelBuilder.Entity<ApplicantPosition>().ToTable("ApplicantPosition");
            modelBuilder.Entity<ApplicationPositionHistory>().ToTable("ApplicationsPositionHistory");

            modelBuilder.Entity<Position>().Property(c => c.name).IsRequired();
            modelBuilder.Entity<Applicant>().Property(c => c.name).IsRequired();
            modelBuilder.Entity<ApplicantPosition>().Property(c => c.appliedDate).IsRequired();

            base.OnModelCreating(modelBuilder);
        }
    }
异常详细信息:System.Data.SqlClient.SqlException:无效的对象名称“dbo.Position”。
第21行:var positions=unitOfWork.PositionRepository.Find(p=>p.PositionID!=null);
第22行:
第23行:返回视图(positions.ToList());
第24行:}
公共类HRContextInitializer:DropCreateDatabaseAlways
{
受保护的覆盖无效种子(HRContext上下文)
{
Position netdeveloper=new Position(){name=“.net developer”,yearsExperienceRequired=5};
Position javadeveloper=new Position(){name=“java developer”,yearsExperienceRequired=5};
byte[]johnImage=File.ReadAllBytes(@“\Content\Photos\1.jpg”);
byte[]luisImage=File.ReadAllBytes(@“\Content\Photos\2.jpg”);
申请人luis=新申请人()
{
name=“Luis”,
skypeuser=“le.valencia”,
电话=“0491732825”,
照片=luisImage
};
申请人约翰=新申请人()
{
name=“John”,
skypeuser=“jo.valencia”,
电话=“343543”,
照片=johnImage
};
AppliantPosition appicantposition=新的AppliantPosition()
{
申请人=路易斯,
Position=netdeveloper,
appliedDate=日期时间。今天,
状态=状态。已应用
};
AppliantPosition appicantposition2=新的AppliantPosition()
{
申请人=约翰,
Position=javadeveloper,
appliedDate=日期时间。今天,
状态=状态。已应用
};
context.Positions.Add(netdeveloper);
context.Positions.Add(javadeveloper);
上下文。申请人。添加(luis);
上下文。申请人。添加(john);
context.applicationspositions.Add(appicantposition);
SaveChanges();
}
}
公共类HRContext:DbContext
{
公共数据库集位置{get;set;}
公共数据库集申请者{get;set;}
公共数据库集应用程序位置{get;set;}
公共数据库集应用程序位置历史记录{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().ToTable(“位置”);
modelBuilder.Entity().ToTable(“申请人”);
modelBuilder.Entity().ToTable(“应用程序位置”);
modelBuilder.Entity().ToTable(“ApplicationsPositionHistory”);
modelBuilder.Entity().Property(c=>c.name.IsRequired();
modelBuilder.Entity().Property(c=>c.name.IsRequired();
modelBuilder.Entity().Property(c=>c.appliedDate.IsRequired();
基于模型创建(modelBuilder);
}
}

您需要告诉EF使用该方法的自定义初始化器。最好在应用程序启动时调用它(如果使用MVC,则在应用程序启动时调用)。但是,在第一次访问上下文之前,应该只调用它一次

protected void Application_Start()
{
     ...
    Database.SetInitializer(new HRContextInitializer());
     ...
}

在HRContext类中,需要设置数据库初始值设定项:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    Database.SetInitializer(new HTContextInitializer());
}