我首先使用实体框架(4.3)和代码(以及 SQL server 2012 localdb)。
我有一个有趣的情况,在一个应用程序中,一个调用返回一个结果('card'),另一个在同一个数据库上使用相同的查询(有数千行可用)返回什么(在这种情况下为 null,因为我正在使用第一或默认)。
using (var context = new MyEntities())
{
//verify account exists
var account = context.Account.SingleOrDefault(a => a.AccountNum == accountNum);
if (account == null)
{
//handle no account
return false;
}
var card = context.cards.FirstOrDefault(c => c.Used == false);
//check that we actually got a card
if (card == null)
{
//handle no cards available
return false;
}
card.Used = true;
//snip...
context.SaveChanges();
}
在我的测试控制台应用程序中,“卡片”将有一个值,而在我的“服务”中则没有。相同的代码(甚至相同的程序集),相同的数据库,相同的行可用。帐户检索在这两种情况下都有效。
我要试试这个: How to force EF Code First to query the database?
但即使这样可行,不一致的行为对我来说也没有意义。
编辑:
最后我有两个数据库实例,正如指出的那样。有趣的部分是数据源的变化取决于库的运行位置(作为 VS11 下的调试或作为管理员用户运行的服务)。这是我的 app.config:
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
<parameters>
<parameter value="Data Source=(localdb)\v11.0; Integrated Security=True; MultipleActiveResultSets=True" />
</parameters>
</defaultConnectionFactory>
当我附加到运行与控制台应用程序相同的库 (DLL) 的服务进程时,数据源已从以下位置更改:
(localdb)\v11.0
到:
.\SQLEXPRESS
相同的 DLL,相同的 app.config。我隐约记得读过一些关于命名与未命名的本地数据库实例以及它们在哪个用户下运行的内容,但是我的谷歌技能目前让我失望。
因此,当我在 SSMS 中打开连接时,我需要使用适当的服务器名称,具体取决于我正在使用的数据库。没什么大不了的,因为这只是开发的设置。
我的问题:
- 有谁知道这是记录在哪里?