我有NHibernate的问题,我似乎无法找到任何解决方案.在我的项目中,我有一个简单的实体(批处理),但每当我尝试运行以下测试时,我都会遇到异常.我已经尝试了几种不同的方法来执行类似的查询,但几乎所有的异常(它与执行的LINQ方法不同).
第一次测试:
[Test]
public void QueryLatestBatch()
{
using (var session = SessionManager.OpenSession())
{
var batch = session.Query<Batch>()
.FirstOrDefault();
Assert.That(batch, Is.Not.Null);
}
}
Run Code Online (Sandbox Code Playgroud)
例外:
System.NullReferenceException : Object reference not set to an instance of an object.
at NHibernate.Linq.NhQueryProvider.PrepareQuery(Expression expression, ref IQuery query, ref NhLinqExpression nhQuery)
at NHibernate.Linq.NhQueryProvider.Execute(Expression expression)
at System.Linq.Queryable.FirstOrDefault(IQueryable`1 source)
Run Code Online (Sandbox Code Playgroud)
第二个测试:
[Test]
public void QueryLatestBatch2()
{
using (var session = SessionManager.OpenSession())
{
var batch = session.Query<Batch>()
.OrderBy(x => x.Executed)
.Take(1)
.SingleOrDefault();
Assert.That(batch, Is.Not.Null);
}
}
Run Code Online (Sandbox Code Playgroud)
例外:
System.NullReferenceException : Object reference …
Run Code Online (Sandbox Code Playgroud) nhibernate castle-windsor linq-to-nhibernate oracle11g windsor-nhfacility
我正在使用Asp.Net Web Api.我希望能够根据连接的客户端访问权限过滤掉响应对象上的某些字段.
例:
class Foo
{
[AccessFilter("Uberlord")]
string Wibble { get; set; }
string Wobble { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
返回数据时,Wibble
只有当前用户上下文可以满足"Uberlord"的值时,才应返回该字段.
我正在探索三种途径,但我没有一个有效的解决方案:
我的问题是:
另一个好处是使用相同的机制从入站请求对象的字段中去除值.
我错过了一个明显的钩子吗?这是通过另一种方式解决的吗?
我们希望在Visual Studio 2012中拥有通用的团队级编辑器设置.我们使用ReSharper.
有没有办法让所有团队成员都可以从中央文件共享导入Visual Studio编辑器设置?
我试过了什么
ReSharper介绍了如何在教程管理和共享选项中进行共享设置.这似乎不适用于我的电脑(设置似乎没有正确导入或导出).此外,ReSharper似乎无法控制选项卡之类的内容,因此我们想知道如何导入Visual Studio的编辑器设置.是否可以拥有一个允许团队共享编辑器设置的统一解决方案?
我们一直在使用Visual Studio数据库项目来维护项目的当前架构,这对于我们在将数据库架构引入新开发机器方面效果很好,但我们还没有用它来升级环境.以前我们使用迁移脚本将您从初始版本带到下一版本,依此类推,直到您处于当前版本,但现在我们希望利用数据库项目的强大功能.
我最近读了Barclay Hill的两篇帖子
在部署期间管理数据运动(第1部分)
在部署期间管理数据运动(第2部分)
其中介绍了从一个版本转到另一个版本时如何进行部署前后脚本,我们已经习惯了很好的效果,但是我现在陷入了一些我无法解决的问题,并感到我错过了.我们有两个不同版本的数据库,但迁移脚本不适用于两者中的较旧版本.以下是我们场景的简化版本.
表
1 ColumnABC CHAR(1)
表1
ColumnXYZ INT
从版本1到版本2的数据移动
预部署脚本检查数据库所处的版本,如果版本为1,则将ColumnABC中的数据放入临时表中.
部署后脚本检查我们现在是否为版本2,并检查是否存在在预部署脚本中创建的临时表,并在将char转换为int后将其放入新列ColumnXYZ中.
表1
Column123 INT
当我们将数据库从版本1升级到版本2然后升级到版本3时,一切正常.但是,如果我们在版本1上有一个数据库并希望跳转到版本3,则部署后脚本将失败,因为没有ColumnXYZ,因为它现在是Column123.
在旧的迁移方法中,这不会是一个问题,因为部署逐个遍历每个版本,但这不是数据库项目的工作方式.还有其他人经历过这个吗?你是如何处理它并让我错过了一些明显的东西?
sql-server data-migration database-project visual-studio-2010
鉴于我有一个类型"Wibble.Wobble"存在于程序集"Foo.Bar"中
并且该程序集未加载到主应用程序加载上下文中
是否存在用于将以下字符串解析为其后续部分的现有公共机制:
"Wibble.Wobble, Foo.Bar, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xyz"
Run Code Online (Sandbox Code Playgroud)
问的原因是我需要在运行时加载各种类型,其中一些类型可能在当前的加载上下文中.其他可能需要从外部组件加载.
我知道如何从当前的加载上下文加载类型Type.GetType("typename")
,我知道如何加载程序集并从中获取类型Assembly.LoadFile("xyz").GetType("abc")
.什么我有一个问题是,如果你试图从一个程序集加载一个类型它不应该是一个完全合格的名称,你可以使用其中的时候Type.GetType
.
解决方案本身不应该那么复杂,它只是在第一个逗号之前拆分字符串.但是我想知道是否有一种方法可以将完全限定名称作为对象表示,因此我不必这样做,这将有助于找到正确的程序集而无需遍历整个目录.
我是否必须关闭ISession
Castle ISessionManager
为NHibernate 生成的?我该如何处理这些交易ISession
呢?我对NHibernate还很陌生.
编辑:我想延迟加载,但我收到此消息:
正在初始化[未能懒惰地初始化角色集合:,没有关闭会话或会话"
这是我继承的通用存储库,用于实现特定的实例.
[Transactional]
public class Repository<TKey, TModel>
: IRepository<TKey, TModel>
where TKey : IComparable
where TModel : class
{
private readonly ISessionManager _sessionManager;
protected ISession Session { get { return _sessionManager.OpenSession(); } }
public Repository(ISessionManager sessionManager)
{
_sessionManager = sessionManager;
}
#region IRepository<TKey,TModel> Members
public virtual TModel Select(TKey key)
{
using (var session = _sessionManager.OpenSession())
{
return session.Get<TModel>(key);
}
}
public virtual IList<TModel> SelectWhere(Func<TModel, bool> query)
{
using (var session …
Run Code Online (Sandbox Code Playgroud) nhibernate castle-windsor castle lazy-loading windsor-nhfacility
我有一个我无法更改的数据库表,其中包含以下数据:
FooTable
Id | EntityAUniqueId | EntityBUniqueId | EntityCUniqueId
============================================================
1 | A1 | B1 | C1
2 | A1 | B1 | C2
3 | A1 | B2 | C3
4 | A1 | B2 | C4
5 | A2 | B3 | C5
6 | A2 | B3 | C6
7 | A2 | B4 | C7
8 | A2 | B4 | C8
Run Code Online (Sandbox Code Playgroud)
我想将此映射到以下结构:
interface IEntityA
{
string UniqueId { get; }
IEnumerable<IEntityB> { get; }
} …
Run Code Online (Sandbox Code Playgroud) nhibernate entity-relationship fluent-nhibernate automapping
以下两种情况有什么区别:
配置1:
<service name="WcfService1.Service1" behaviorConfiguration="MyServiceTypeBehaviors">
<host>
<baseAddresses>
<add baseAddress="net.tcp://127.0.0.1:808/" />
</baseAddresses>
</host>
<endpoint address="service"
binding="netTcpBinding"
bindingConfiguration="MainBinding"
bindingName="MainBinding"
name="DefaultEndpoint"
contract="WcfService1.IService1" />
<endpoint address="mex"
binding="mexTcpBinding"
contract="IMetadataExchange" />
</service>
Run Code Online (Sandbox Code Playgroud)
配置2:
<service name="WcfService1.Service1" behaviorConfiguration="MyServiceTypeBehaviors">
<host>
<baseAddresses>
<add baseAddress="net.tcp://127.0.0.1:808/service" />
</baseAddresses>
</host>
<endpoint address="net.tcp://127.0.0.1:808/service"
binding="netTcpBinding"
bindingConfiguration="MainBinding"
bindingName="MainBinding"
name="DefaultEndpoint"
contract="WcfService1.IService1" />
<endpoint address="mex"
binding="mexTcpBinding"
contract="IMetadataExchange" />
</service>
Run Code Online (Sandbox Code Playgroud)
我的理解是在任何一种情况下,基地址+端点地址都解析为相同的绝对地址
但是为什么我在配置2上得到错误:"没有终点正在监听net.tcp://127.0.0.1:808 /
但是配置1 运行服务没有任何错误!
编辑1:
工作配置:
<host>
<baseAddresses>
<add baseAddress="net.tcp://127.0.0.1:808/" />
</baseAddresses>
</host>
<endpoint address="service"
binding="netTcpBinding"
bindingConfiguration="MainBinding"
bindingName="MainBinding"
name="DefaultEndpoint"
contract="WcfService1.IService1" …
Run Code Online (Sandbox Code Playgroud) 我想弄清楚为什么我的用户在确认他们的电子邮件时会经常收到无效令牌.我无法重现这个问题.
这是设置:
userManager.UserTokenProvider = new EmailTokenProvider<User>();
Run Code Online (Sandbox Code Playgroud)
以下是令牌的生成方式:
var code = await userManager.GenerateEmailConfirmationTokenAsync(user.Id);
Run Code Online (Sandbox Code Playgroud)
以下是它的验证方式:
var result = await userManager.ConfirmEmailAsync(user.Id, code);
Run Code Online (Sandbox Code Playgroud)
据我所知,EmailTokenProvider
使用安全标记进行无效.我的理解是,只有在更改用户实体(如更改密码或用户名)时,此戳记才会更改.然而,我更频繁地获得无效令牌,这是唯一的解释.
我正在寻找任何可以帮助我阐明为什么会发生这种情况的指针.
编辑:
我挖掘了源代码(文档非常差),并且@trailmax指出下面EmailTokenProvider
这个用例是错误的.它基于TotpSecurityStampBasedTokenProvider
令牌的硬编码超时为3分钟!
我试图在AppVeyor成功构建之后标记存储库.我已阅读以下资源:
但我不知道如何在AppVeyor环境变量中替换.这是我正在使用的Yaml:
on_success:
- git config --global credential.helper store
- ps: Add-Content "$env:USERPROFILE\.git-credentials" "https://$($env:access_token):x-oauth-basic@github.com`n"
- git tag -a release/$($env:APPVEYOR_BUILD_VERSION)
- git push origin release/$($env:APPVEYOR_BUILD_VERSION)
Run Code Online (Sandbox Code Playgroud)
这会导致AppVeyor构建日志中出现以下错误
git config --global credential.helper store
Add-Content "$env:USERPROFILE\.git-credentials" "https://$($env:access_token):x-oauth-basic@github.com`n"
git tag -a release/$($env:APPVEYOR_BUILD_VERSION)
fatal: 'release/$($env:APPVEYOR_BUILD_VERSION)' is not a valid tag name.
Command exited with code 128
Run Code Online (Sandbox Code Playgroud)
鉴于powershell Add-Content行应该按照示例工作,你应该如何将变量替换为git命令?
.net ×3
c# ×3
nhibernate ×3
appveyor ×1
automapping ×1
castle ×1
git ×1
lazy-loading ×1
oracle11g ×1
reflection ×1
resharper ×1
rest ×1
sql-server ×1
wcf ×1
yaml ×1