想象一下,我们正在做一些过程,我想在程序的开头设置一个整体种子:例如
mylist <- list( as.list(rep(NA,3)), as.list(rep(NA,3)) )
foo <- function(x){ for(i in 1:length(x)){
x[[i]] <- sample(100,1)
}
return(x)
}
# start block
set.seed(1)
l1 <- lapply(mylist, foo)
l2 <- lapply(mylist, foo)
# end
Run Code Online (Sandbox Code Playgroud)
当然在一个区块内l1
并且l2
是不同的,但是如果我再次运行上面的区块l1
将与之前相同并且l2
将与之前相同.
想象一下,foo
是可怕的耗时,所以我想用mclapply
没有lapply
,所以我这样做:
library(parallel)
# start block
set.seed(1)
mclapply(mylist , foo, mc.cores = 3)
mclapply(mylist , foo, mc.cores = 3)
# end
Run Code Online (Sandbox Code Playgroud)
如果我再次运行此块,我将在下次获得不同的结果.我如何产生与使用lapply
但设置一个整体种子相同的行为mclappy
.我查看了mclapply
doc,但我不确定因为使用:
set.seed(1)
l1 <- mclapply(mylist , …
Run Code Online (Sandbox Code Playgroud) 我有一个数据库种子文件:
class ContactTableSeeder extends Seeder {
public function run()
{
$contacts = array(
array(
'first_name' => 'Test',
'last_name' => 'Contact',
'email' => 'test.contact@emai.com',
'telephone_number' => '0111345685',
'address' => 'Address',
'city' => 'City',
'postcode' => 'postcode',
'position' => 'Director',
'account_id' => 1
)
);
foreach ($contacts as $contact) {
Contact::create($contact);
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行php artisan migrate时:refresh --seed它为数据库播种并在contacts表中创建相关记录,除了它没有用种子数组中的任何信息填充字段.我对其他表使用完全相同的语法并且它们工作正常,我还彻底检查了每个字段以确保它们与数据库字段匹配,但无论我做什么它都不会正确播种.
有没有人有任何想法?
是否可以使用visual studio Sql Server数据工具数据库项目为不同的发布配置文件部署不同的种子数据集?
我们知道您可以使用部署后脚本部署种子数据.我们知道您可以使用发布配置文件工具部署到不同的环境.我们不知道的是如何将不同的种子数据部署到不同的环境中.
我们为什么要这样做?
database-project visual-studio seeding publish-profiles sql-server-data-tools
我从一个种子数据库开始,我试图在Laravel 5中的单元测试之间重新设置数据库.在Laravel 4中我理解你可以简单地使用Illuminate\Support\Facades\Artisan并运行命令
Artisan::call('migrate');
Artisan::call('db:seed');
Run Code Online (Sandbox Code Playgroud)
或者你认为可以这样做:
$this->seed('DatabaseSeeder');
Run Code Online (Sandbox Code Playgroud)
在每次测试之前.在Laravel 5中,这似乎已被替换为
use DatabaseMigrations;
Run Code Online (Sandbox Code Playgroud)
要么
use DatabaseTransactions;
Run Code Online (Sandbox Code Playgroud)
我已经尝试使用这些并且设法获得测试以迁移数据库; 但是,它实际上并没有重新设置表格中的数据.我已经阅读了几个论坛抱怨这个,并尝试了几种不同的方法从TestCase和每个测试中调用这些...添加
$this->beforeApplicationDestroyed(function () {
Artisan::call('migrate');
Artisan::call('migrate:reset');
Artisan::call('db:seed');
DB::disconnect();
});
Run Code Online (Sandbox Code Playgroud)
到TestCase.php tearDown()
......
我也尝试过添加
$this->createApplication();
Run Code Online (Sandbox Code Playgroud)
从TestCase.php的每个测试中调用的方法
有时它只是完全擦掉我的桌子.我在Laravel的网站或博客中找到的任何内容似乎都无效.部分原因可能是因为我可能在Laravel 5中尝试Laravel 4方法.在Laravel 5中有没有办法做到这一点?
我的testcase.php代码如下:
<?php
use Illuminate\Support\Facades\Artisan as Artisan;
class TestCase extends Illuminate\Foundation\Testing\TestCase{
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;
protected $baseUrl = 'http://localhost';
public function initializeTests(){
$this->createApplication();
Artisan::call('migrate');
$this->artisan('migrate');
Artisan::call('db:seed');
$this->artisan('db:seed');
$this->seed('DatabaseSeeder');
$this->session(['test' => 'session']);
$this->seed('DatabaseSeeder');
}
public function tearDown()
{
Mockery::close();
Artisan::call('migrate:reset');
$this->artisan('migrate:reset');
Artisan::call('migrate:rollback');
$this->artisan('migrate:rollback');
Artisan::call('migrate');
$this->artisan('migrate');
Artisan::call('db:seed'); …
Run Code Online (Sandbox Code Playgroud) 我正在使用 Django 2.0、Python 3.7 和 MySql 5。我最近安装了 django_address 模块。我注意到当我根据我的 models.py 文件运行我的初始迁移时......
from django.db import models
from address.models import AddressField
from phonenumber_field.modelfields import PhoneNumberField
class CoopType(models.Model):
name = models.CharField(max_length=200, null=False)
class Meta:
unique_together = ("name",)
class Coop(models.Model):
type = models.ForeignKey(CoopType, on_delete=None)
address = AddressField(on_delete=models.CASCADE)
enabled = models.BooleanField(default=True, null=False)
phone = PhoneNumberField(null=True)
email = models.EmailField(null=True)
web_site = models.TextField()
Run Code Online (Sandbox Code Playgroud)
它创建了一些地址表,包括...
mysql> show create table address_country;
+-----------------+---------------------------------------------------+
| Table | Create Table |
+-----------------+---------------------------------------------------+
| address_country | CREATE TABLE `address_country` ( |
| | …
Run Code Online (Sandbox Code Playgroud) 我知道我可以使用该hasAttached
方法在 Laravel 8 中创建与数据透视表数据的多对多关系:
Meal::factory()
->count(3)
->hasAttached(Ingredient::factory()->count(3), ['gram' => 100])
->create();
Run Code Online (Sandbox Code Playgroud)
是否有任何方便的方法(除了编写自定义 for 循环之外)为数据透视表中的每个附加条目添加随机数据?我希望'gram'
是每个创建的关系的随机数。我尝试了以下方法,但rand
表达式仅被计算一次,并为每个关系使用相同的条目填充数据透视表:
Meal::factory()
->count(3)
->hasAttached(Ingredient::factory()->count(3), ['gram' => rand(1,100]) //not working
->create();
Run Code Online (Sandbox Code Playgroud)
编辑:我基本上想要实现
for ($i = 1; $i <= 3; $i++) {
$meal = Meal::factory()->create();
for ($j = 1; $j <= 3; $j++) {
$ingredient = Ingredient::factory()->create();
$meal->ingredients()->save($ingredient, ['gram' => rand(5, 250)]);
}
}
Run Code Online (Sandbox Code Playgroud)
使用 Laravel 流畅的工厂方法。
当我尝试做的时候
rake db:reset
Run Code Online (Sandbox Code Playgroud)
要么
rake db:drop
rake db:create
rake db:schema:load
rake db:seed
Run Code Online (Sandbox Code Playgroud)
NoMethodError: undefined method 'fields' for nil:NilClass
当种子出现时,我随机得到一个.这是一个:
[1m[35m (186.0ms)[0m INSERT INTO "schema_migrations" (version) VALUES ('20130318105449')
[1m[36m (187.0ms)[0m [1mINSERT INTO "schema_migrations" (version) VALUES ('20130319154146')[0m
[1m[35m (189.0ms)[0m INSERT INTO "schema_migrations" (version) VALUES ('20130322132730')
[1m[36m (104.0ms)[0m [1mINSERT INTO "schema_migrations" (version) VALUES ('20130322142814')[0m
NoMethodError: undefined method `fields' for nil:NilClass: SELECT COUNT(*)
FROM pg_class c
LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind in ('v','r')
AND c.relname = 'schema_migrations'
AND n.nspname …
Run Code Online (Sandbox Code Playgroud) 我正在编写一个 MVC 5 互联网应用程序,并希望得到一些帮助来执行种子方法以使用一些实体填充数据库。
这是我的DbContext
代码:
public class CanFindLocationDatabaseContext : DbContext
{
public class SystemInitializer : CreateDatabaseIfNotExists<CanFindLocationDatabaseContext>
{
protected override void Seed(CanFindLocationDatabaseContext context)
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
在我的Application_Start
方法中,我有以下代码:
System.Data.Entity.Database.SetInitializer<CanFindLocationDatabaseContext>(new CanFindLocation.Context.CanFindLocationDatabaseContext.SystemInitializer());
Run Code Online (Sandbox Code Playgroud)
当我访问类中的任何DbSet
对象时CanFindLocationDatabaseContext
,不会执行种子方法。在我测试种子代码之前没有数据库。
正在创建数据库,正在创建表,但是没有调用seed 方法,并且任何表中都没有数据。
我在同一个项目中还有以下标识 2.1 的代码:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("CanFindLocationDatabaseContext", throwIfV1Schema: false)
{
}
}
Run Code Online (Sandbox Code Playgroud)
为该 DbContext 类调用种子方法,但不为CanFindLocationDatabaseContext
.
为什么会这样,我该如何编写代码以便执行种子方法?
提前致谢。
由于我无法使用该migrate.exe
工具来更新数据库,因此我正在创建迁移 SQL 脚本并手动应用它们,这非常有效。
由于种子部分未包含在迁移中,因此它们不会产生 SQL 脚本。
我怎样才能获得种子方法来生成 SQL 脚本?
我目前正在将种子方法应用于我的本地数据库。解决问题的一种方法是使用实体框架拦截器拦截 SQL 调用,但这听起来像是一个肮脏的黑客。那么有没有更好的方法呢?
更新 8/29/18
在new
种子数据的inline -ing 中也看到了这个问题。打开了一个EF Core 问题。将使用任何发现更新问题。
我正在尝试使用EF Core 2.1 的播种机制。但是,我想从 json 平面文件加载种子数据,而不是硬编码新的 C# 对象。我写了下面的扩展方法,对于初始迁移效果很好。它查找命名为[MyEntity].json
in 的文件并将DataPath
它们反序列化为对象。
问题是,如果我添加后续迁移,即使没有更改模型、配置或 json 文件中的任何内容,新迁移也会删除每个实体并再次重新插入它们。因此,它Up()
包含一堆删除,然后是一堆相同数据的插入。我怀疑这是因为 EF Core 不够聪明,无法识别它是一组相同的种子数据。
题:
有没有办法将 EF Core 2.1 种子与外部数据源(例如 json 文件)一起使用,而无需每次迁移都删除并重新插入数据?
我的播种扩展方法:
public static class ModelBuilderExtensions
{
public static string DataPath { private get; set; } = "..\\..\\data";
public static void Seed<TEntity>(this ModelBuilder modelBuilder) where TEntity : class, IBaseEntity
{
var entities = GetSeedRows<TEntity>();
modelBuilder.Entity<TEntity>().HasData(entities);
}
private static TEntity[] …
Run Code Online (Sandbox Code Playgroud) seeding ×10
c# ×2
laravel ×2
apply ×1
database ×1
dbcontext ×1
django ×1
factory ×1
laravel-4 ×1
laravel-5 ×1
laravel-8 ×1
migrate ×1
phpunit ×1
postgresql ×1
python ×1
python-3.x ×1
r ×1
rake ×1
random-seed ×1
unit-testing ×1