当linq2sql使用(在asp.net mvc应用程序中)时,首选的做法是:为DataContextlike 创建"singleton" :
partial class db
{
static db _db = new db(global::data.Properties.Settings.Default.nanocrmConnectionString, new AttributeMappingSource());
public static db GetInstance()
{
return _db;
}
}
Run Code Online (Sandbox Code Playgroud)
或者在需要时检索新实例using:
using (db _db = new db())
{
...
}
Run Code Online (Sandbox Code Playgroud)
使用using会给代码带来一些限制.所以我更喜欢使用单身之一.这是一种奇怪的做法吗?
UPD:
解释为什么我使用单身人士:
public class UserGroupRepository
{
public static IQueryable<Group> RolesFor(string username)
{
User user = UserRepository.WithUsername(username);
return from g in db.GetInstance().Groups
join ug in db.GetInstance().UsersGroups on g.Id equals ug.GroupId
where ug.UserId == user.Id
select g;
}
} …Run Code Online (Sandbox Code Playgroud) 有什么是模拟以及如何使用它们的描述:http://www.phpunit.de/manual/current/en/test-doubles.html
但所有可能的方法,如不全面的解释$this->any(),$this->once(),$this->equalTo()等
所以我正在寻找Mock生成API
PS:是的,我知道我可以在消息来源中查看它,但我正在寻找一个在线API文档
文件说明:
class Cart
{
// ...
/**
* @OneToOne(targetEntity="Customer", inversedBy="cart")
* @JoinColumn(name="customer_id", referencedColumnName="id")
*/
private $customer;
// ...
}
Run Code Online (Sandbox Code Playgroud)
这个注释代表了这样的sql:
JOIN Customer c ON c.id = cart.customer_id
Run Code Online (Sandbox Code Playgroud)
问题是我需要在那里添加额外的比较,例如:
JOIN Customer c ON c.id = cart.customer_id AND c.anotherField = <constant>
Run Code Online (Sandbox Code Playgroud)
有什么解决方案吗?
UPD:
我现在需要的真正的附加条件是 <const> BETWEEN c.f1 AND c.f2
对于C#,有一种方法可以编写一个语句来等待页面上的元素出现:
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
IWebElement myDynamicElement = wait.Until<IWebElement>((d) =>
{
return d.FindElement(By.Id("someDynamicElement"));
});
Run Code Online (Sandbox Code Playgroud)
但有没有办法在phpunit的selenium扩展中做同样的事情?
我发现的唯一的事情是$this->timeouts()->implicitWait(),但显然它不是我想要的.
这个问题是关于Selenium2和PHPUnit_Selenium2相应的扩展.
我有一个文件名数组,每个进程只需要创建和写入一个文件.
这就是我的意思:
foreach ($filenames as $VMidFile) {
if (file_exists($VMidFile)) { // A
continue;
}
$fp = fopen($VMidFile, 'c'); // B
if (!flock($fp, LOCK_EX | LOCK_NB)) { // C
continue;
}
if (!filesize($VMidFile)) { // D
// write to the file;
flock($fp, LOCK_UN);
fclose($fp);
break;
}
flock($fp, LOCK_UN);
fclose($fp); // E
}
Run Code Online (Sandbox Code Playgroud)
但我不喜欢我依靠的filesize.
有什么建议以另一种(更好的)方式做到这一点?
UPD:添加标签以便轻松讨论
UPD 2:我正在使用,filesize因为我没有看到任何其他可靠的方法来检查当前线程是否创建了文件(因此它还是空的)
UPD 3:解决方案应该是无条件竞赛.
在另一个答案中,我发现了一种奇怪的语法:
(SELECT * FROM `articles`
WHERE date >= UNIX_TIMESTAMP(DATE(NOW() - INTERVAL 30 DAY))
ORDER BY `views` DESC
LIMIT 20
) ORDER by `views` ASC
Run Code Online (Sandbox Code Playgroud)
这虽然是由mysql执行的.
为什么我认为它应该失败:
SELECT条款我发现运行意外,并没有解释为什么它的工作原理.
它不符合https://dev.mysql.com/doc/refman/5.5/en/select.html上定义的语法
那么,为什么它有效?任何参考?
MySQL 5.5.28.我有两个表Person,Message后者有一个外键给前者.每个表都有id主键列,Person表中还有一个personId(唯一)索引的列.
下面的查询应该利用personId密钥索引,但是MySQL需要扫描整个Message表,原因如下:
mysql> EXPLAIN SELECT `m`.*
-> FROM
-> `Message` AS `m`
-> LEFT JOIN
-> `Person` AS `p` ON (`m`.`person` = `p`.`id`)
-> WHERE
-> 'M002649397' IS NULL OR
-> `p`.`personId` = 'M002649397';
+----+-------------+-------+--------+---------------+---------+---------+----------------+--------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+---------------+---------+---------+----------------+--------+-------------+
| 1 | SIMPLE | m | ALL … 如何配置symfony/console接受动态选项列表?
也就是说 - 选项的名称在开发步骤中是未知的,因此我需要一个应用程序来接受所有内容并使用标准公开它$input->getOption.
任何机会都可以轻松完成(不会在百万个地方乱砍组件)?
我的尝试包括扩展ArgvInput和InputDefinition类,但由于各种原因(它们是客观的和symfony/console组件实现特定的)它们失败了.简而言之:前者需要多次调用解析; 后者 - 在多个地方实例化,所以我找不到合适的方法来注入它.
在clojure v1.6.0中,此代码只运行并占用一个核心的100%:
(defn average [x y] (/ (+ x y) 2))
(defn improve [guess x]
(average guess (/ x guess)))
(defn sqrt-iter [guess x]
(sqrt-iter (improve guess x) x))
(sqrt-iter 1 4)
Run Code Online (Sandbox Code Playgroud)
我希望它StackOverflowError立即抛出,但事实并非如此.
任何解释为什么会发生?