我是开发人员,没有VB.NET的经验.
场景:
Namespace Presenters
Public Class BaseFooPresenter
' assuming the public default parameterless constructor
Public Sub New(ByVal strvar As String)
' TODO with strvar variabile
End Sub
End Class
Public Class FooPresenter
Inherits BaseFooPresenter
Public Sub New(ByVal boolvar As Boolean)
' TODO with boolvar variabile
End Sub
Public Sub New(ByVal boolvar As Boolean, _
ByVal objvar As Object)
MyBase.New(String.Empty)
Me.New(true)
' TODO with objvar variabile
End Sub
End Class
End Namespace
Run Code Online (Sandbox Code Playgroud)
在第二个FooPresenter构造函数的代码我得到一个错误
"构造函数调用仅在实例构造函数的第一个语句中有效."
在:
Me.New(true)
Run Code Online (Sandbox Code Playgroud)
如果我颠倒了订单,我会收到错误:
MyBase.New(String.Empty)
Run Code Online (Sandbox Code Playgroud)
我可以创建一个方法SetValues(... parameters ...)并从两个构造函数中调用它,但有人知道一个解决方法以避免此错误吗?为什么编译器不会验证在重载之前调用基本构造函数的可能性构造函数? …
我正在迁移这样的应用程序:
Vehicle v = null;
using (ISession session = MyNHibernateSession())
{
v = Vehicle.FindById(1);
}
using (ISession session = MyNHibernateSession())
{
// somwwhere into these4 lines Vehicle comes Finded
DoSomething();
DoSomething2();
DoSomething3();
DoSomething4();
DoSomething5();
DoSomething6();
// if i do this i get an error "another object with the same id etc etc etc
session.Update(v);
}
Run Code Online (Sandbox Code Playgroud)
我不想做这样的事情:
session.EvictAllByType(typeof(Vehicle));
Run Code Online (Sandbox Code Playgroud)
可能吗?怎么样?谢谢
我有一个开放的Castle ActiveRecord SessionScope.我需要使用包装在SessionScope中的nhibernate会话.
如何从SessionScope检索当前的NHibernate会话对象?
非常感谢你的回复.
[更新]我有这个代码
ISession session = SessionScope.Current.GetSession( );
Run Code Online (Sandbox Code Playgroud)
但我不知道什么传递给GetSession参数
我有这段代码:
public class Leg : ProxiestChild
{
public virtual Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
问题是:
var leg = new Leg(); // leg is not Leg, instead ProxiedLeg
var trueleg = (Leg)leg; // exception leg is a ProxiedLeg
Run Code Online (Sandbox Code Playgroud)
我需要这样的东西
public class ProxiestChild
{
// some method that overloads explicit CAST
// where receiving the proxied object i returns the unproxied object
// to be casted
}
Run Code Online (Sandbox Code Playgroud) 我定义:
[ActiveRecord("BaseEntity", Lazy = true )]
class BaseClass {}
[ActiveRecord("DerivedEntity", Lazy = true )]
class DerivedClass : BaseClass {}
Run Code Online (Sandbox Code Playgroud)
在DB BaseEntity和DerivedEntity中,1 = 1
我创造:
BaseClass myClass = New DerivedClass();
Run Code Online (Sandbox Code Playgroud)
问题:
当我试着问
myClass is DerivedClass
Run Code Online (Sandbox Code Playgroud)
我得到"假",因为myClass不是DerivedClass而是BaseClassProxy.
没有延迟加载,NHibernate不会创建代理对象,我没有这个问题.
当我尝试将myClass转换为DerivedClass时,我得到了这个错误(显然),因为我尝试将BaseClassProxy对象强制转换为DerivedClass.
Unable to cast object of type 'Castle.Proxies.BaseClassProxy' to type 'DerivedClass'.
Run Code Online (Sandbox Code Playgroud)
问题:
如何获取实际分配的对象类型以将其与DerivedClass进行比较?
是否可以转换BaseClassProxy对象以获取DerivedClass的实例?
感谢您的答复.
c# ×3
nhibernate ×3
.net ×2
casting ×2
session ×2
class ×1
constructor ×1
isession ×1
lazy-loading ×1
object ×1
proxy ×1
vb.net ×1