是否有rake命令来清除数据库表中的数据?
如何创建db:seed脚本以将数据预填充到表中?
我正在使用Entity Framework Code First和MVC 5.当我使用个人用户帐户身份验证创建我的应用程序时,我获得了一个帐户控制器以及所有必需的类和代码,以使Indiv用户帐户身份验证工作.
已经存在的代码包括:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext() : base("DXContext", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
Run Code Online (Sandbox Code Playgroud)
但后来我继续使用代码创建了我自己的上下文,所以我现在也有以下内容:
public class DXContext : DbContext
{
public DXContext() : base("DXContext")
{
}
public DbSet<ApplicationUser> Users { get; set; }
public DbSet<IdentityRole> Roles { get; set; }
public DbSet<Artist> Artists { get; set; }
public DbSet<Paintings> Paintings { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
最后,我有以下种子方法为我添加一些数据,同时开发:
protected override void Seed(DXContext context) …
Run Code Online (Sandbox Code Playgroud) 我一直在玩新的MVC 5,我有一些模型,控制器和视图设置使用代码优先迁移.
我的问题是如何为用户和角色提供种子?我目前在Configuration.cs中的Seed方法中播放一些参考数据.但是在我看来,在第一次点击AccountController之前,不会创建用户和角色表.
我目前有两个连接字符串,所以我可以将我的数据从我的身份验证分成不同的数据库.
如何让用户,角色等表格与我的其他人一起填充?而不是当帐户控制器被击中?
当我rake db:seed
在我的Rails
应用程序中运行时,我收到此错误:
US-ASCII中的无效字节序列(参数错误)
我只是添加science_majors
到我的种子文件,现在当我运行rake db:seed
它给我这个错误:
无效的字节序列错误
为什么会这样,我该如何解决?
seed.rb的一部分
@college = College.find_or_create_by_name!('University of Pittsburgh')
if @college.update_attributes(
url: 'university-of-pittsburgh',
public: 'Public',
years: '4-year',
category: 'National University',
calendar: 'Semester',
location: 'Pittsburgh, PA',
setting: 'Large City (250-500k)',
retention: '90',
majors: 'business/marketing: 15%|social sciences: 14%|health professions: 11%|english: 10%|engineering: 9%|psychology: 8%|biology: 7%|history: 5%',
scholarships_link: 'http://www.oafa.pitt.edu/universityschlrs.aspx',
map: '<iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="https://maps.google.com/maps?f=q&source=s_q&hl=en&geocode=&q=university+of+pittsburgh&aq=&sll=40.444261,-79.970448&sspn=0.142165,0.251656&ie=UTF8&hq=university+of+pittsburgh&t=m&ll=40.443486,-79.958245&spn=0.010798,0.021038&output=embed"></iframe><br /><small><a href="https://maps.google.com/maps?f=q&source=embed&hl=en&geocode=&q=university+of+pittsburgh&aq=&sll=40.431368,-79.9805&sspn=0.142165,0.251656&ie=UTF8&hq=university+of+pittsburgh&t=m&ll=40.443486,-79.958245&spn=0.010798,0.021038" style="color:#0000FF;text-align:left">View Larger Map</a></small>',
street_view: '<iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" …
Run Code Online (Sandbox Code Playgroud) 我正在研究迁移,以便清理我们的部署过程.将更改推向生产时所需的人工干预越少越好.
我在迁移系统中遇到了3个主要障碍.如果我无法找到一个干净的方式,他们是显示塞子.
1.如何为每次迁移添加种子数据:
我执行命令"add-migration",它使用Up和Down函数来构建一个新的迁移文件.现在,我想通过Up和Down更改自动更改数据.我不希望将种子数据添加到Configuration.Seed方法,因为它运行所有以各种重复问题结束的迁移.
2.如果无法满足上述要求,我该如何避免重复?
我有一个枚举,我循环,以将值添加到数据库.
foreach(var enumValue in Enum.GetValues(typeof(Access.Level)))
{
context.Access.AddOrUpdate(
new Access { AccessId = ((int)enumValue), Name = enumValue.ToString() }
);
}
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
即使我使用的是AddOrUpdate,我仍然会在数据库中获得重复项.上面的代码将我带到了第三个也是最后一个问题:
3.如何为主键提供种子?
我用以上代码列举的是:
public class Access
{
public enum Level
{
None = 10,
Read = 20,
ReadWrite = 30
}
public int AccessId { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我指定了我想要的值作为我的主键,但实体框架似乎忽略了它.他们最终仍然是1,2,3.我怎么能得到10,20,30?
目前这些EF的局限性还是有意限制,以防止我没有看到的其他类型的灾难?
我正在使用FactoryGirl和Faker在我的seeds.rb
文件中生成用户对象但由于某种原因,正在创建完全相同的用户并且rake db:seed
由于电子邮件唯一性验证而失败.
用户工厂:
#users.rb
require 'faker'
FactoryGirl.define do
factory :user do
first_name Faker::Name.first_name
last_name Faker::Name.last_name
phone Faker::PhoneNumber.cell_phone
email Faker::Internet.email
password "password"
password_confirmation "password"
end
end
Run Code Online (Sandbox Code Playgroud)
和seeds.rb
文件中的代码:
#seeds.rb
rand(5..11).times { FactoryGirl.create(:user) }
Run Code Online (Sandbox Code Playgroud)
错误:
ActiveRecord::RecordInvalid: Validation failed: Email has already been taken
如果我打开控制台并使用FactoryGirl.create(:user)
我得到相同的结果......相反的对象正在反复创建,即使我只运行Faker::Internet.email
几次我会收到几封电子邮件.
工厂女工:
[1] pry(main)> FactoryGirl.create(:user)
...
=> #<User id: 3, first_name: "Osvaldo", last_name: "Wunsch", email: "willy@damore.net", phone: "(912)530-4949 x64848", created_at: "2014-07-31 20:57:27", updated_at: "2014-07-31 20:57:27", encrypted_password: "$2a$10$mxWC7yLYR0m/Sw8MO6Lyru.xuTHCdCEuM9Orx3LXGApF...", reset_password_token: nil, reset_password_sent_at: …
Run Code Online (Sandbox Code Playgroud) 我的一部分seeds.rb
将大量数据加载到数据库中.我希望能够有选择地加载这些数据.例如
$ rake db:seed
Run Code Online (Sandbox Code Playgroud)
要么
$rake db:seed[0]
Run Code Online (Sandbox Code Playgroud)
只会加载必要的数据来运行网站
$ rake db:seed[1]
Run Code Online (Sandbox Code Playgroud)
我也会将我的大数据文件加载到数据库中.这可能吗?我怎样才能做到这一点?如果没有,谁能想到办法做我想做的事情?
在生成随机数方面,什么是种子?
我需要生成数百到数千个随机数,我已经阅读了很多关于使用"种子"的内容.什么是种子?是随机数从哪里开始的种子?例如,如果我将种子设置为5,它会生成从5到我的限制的数字吗?所以它永远不会给我3个例子.
我正在使用C++,所以如果你提供任何例子,如果是在C++中它会很好.
谢谢!
我想在R中仅在本地设置种子(内部函数),但似乎R不仅在本地设置种子,而且在全局设置种子.这是我正在尝试(不)做的一个简单示例.
myfunction <- function () {
set.seed(2)
}
# now, whenever I run the two commands below I'll get the same answer
myfunction()
runif(1)
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是:为什么R在全局设置种子,而不仅仅是在我的函数中?以及如何让R只在我的函数中设置种子?
我有一个简单的任务,我想要开始日期和结束日期并循环日期/日期.此代码正在我的db:seed rake任务中使用.目前,我的代码经历了以下尝试.
(someModel.start_date.to_datetime..someModel.end_date.to_datetime).each {
|x| puts x
}
......
(someModel.start_date...someModel.end_date).each { |x| puts x }
Run Code Online (Sandbox Code Playgroud)
在每种情况下,我都会收到这样的错误.
can't iterate from ActiveSupport::TimeWithZone
or
can't iterate from DateTime
Run Code Online (Sandbox Code Playgroud)
如果有人知道如何迭代一系列DateTimes,我将非常感激.