I am using NHibernate 3.3 with vb.net
I am trying to mapping through code but it results in cannot create an instance of interface.
Code is as below.
Dim cfg As New Configuration()
cfg.Properties.Add(NHibernate.Cfg.Environment. _
ConnectionProvider, GetType(NHibernate.Connection. _
DriverConnectionProvider).AssemblyQualifiedName)
cfg.Properties.Add(NHibernate.Cfg.Environment.Dialect, _
GetType(NHibernate.Dialect.MsSql2008Dialect). _
AssemblyQualifiedName)
cfg.Properties.Add(NHibernate.Cfg.Environment.ConnectionDriver, _
GetType(NHibernate.Driver.SqlClientDriver). _
AssemblyQualifiedName)
cfg.Properties.Add(NHibernate.Cfg.Environment.ConnectionStringName, _
"myconnectionstring")
cfg.Properties.Add(NHibernate.Cfg.Environment. _
ProxyFactoryFactoryClass, GetType _
(NHibernate.Bytecode.IProxyFactoryFactory). _
AssemblyQualifiedName)
Dim s2 As NHibernate.ISessionFactory = cfg.BuildSessionFactory
db = s2.OpenSession()
error occurs at IproxyFactoryFactory.
I included all required references such as NHibernate.Linq, NHibernate.dialect etc
Please help
Thanks
The line:
cfg.Properties.Add(NHibernate.Cfg.Environment. _
ProxyFactoryFactoryClass, GetType _
(NHibernate.Bytecode.IProxyFactoryFactory). _
AssemblyQualifiedName)
The ProxyFactoryFactoryClass is meant to be a class, but you are specifying an interface (NHibernate.Bytecode.IProxyFactoryFactory), change it to:
cfg.Properties.Add(NHibernate.Cfg.Environment. _
ProxyFactoryFactoryClass, GetType _
(NHibernate.Bytecode.DefaultProxyFactoryFactory). _
AssemblyQualifiedName)
Related
Is there any other way on how to refine my code?
Sub save_item(ByVal strtype As String, ByVal strgendes As String, ByVal strquantity As String, ByVal strfund As String, ByVal strebudget As String, _
ByVal strtotaltenpercent As String, ByVal strjan As String, ByVal strfeb As String, ByVal strmarch As String, _
ByVal strapril As String, ByVal strmay As String, ByVal strjune As String, ByVal strjuly As String, _
ByVal straug As String, ByVal strsept As String, ByVal stroct As String, ByVal strnov As String, ByVal strdec As String, _
ByVal strq1 As String, ByVal strq2 As String, ByVal strq3 As String, ByVal strq4 As String, ByVal strtotal_item As String,
_
ByVal strtotalprice As String, ByVal strdate As String, ByVal stryear As String)
Dim saveall As New tblPPMP With {.Type = strtype, _
.GenDes = strgendes, _
.Quantity = strquantity, _
.Fund = strfund, _
.Ebudget = strebudget, _
.Total_tenpercent = strtotaltenpercent, _
.Jan = strjan, _
.Feb = strfeb, _
.March = strmarch, _
.April = strapril, _
.May = strmay, _
.June = strjune, _
.Jul = strjuly, _
.Aug = straug, _
.Sept = strsept, _
.Oct = stroct, _
.Nov = strnov, _
.Dec = strdec, _
.Q1 = strq1, _
.Q2 = strq2, _
.Q3 = strq3, _
.Q4 = strq4, _
.Total_Item = strtotal_item, _
.Total_Price = strtotalprice, _
.dr_date = strdate, _
.dr_year = stryear}
dbcon.tblPPMPs.InsertOnSubmit(saveall)
MsgBox("Save Successfully")
Try
dbcon.SubmitChanges()
Catch ex As Exception
End Try
End Sub
Catching and then throwing a new Exception seems pointless. Remove that.
i m using NHibernate 3.3 with linq. When i write a select query it results nothing.
Code for configuration and oppening session is given bleow.
Dim cfg As New Configuration()
cfg.Properties.Add(NHibernate.Cfg.Environment. _
ConnectionProvider, GetType(NHibernate.Connection. _
DriverConnectionProvider).AssemblyQualifiedName)
cfg.Properties.Add(NHibernate.Cfg.Environment.Dialect, _
GetType(NHibernate.Dialect.MsSql2012Dialect). _
AssemblyQualifiedName)
cfg.Properties.Add(NHibernate.Cfg.Environment.ConnectionDriver, _
GetType(NHibernate.Driver.SqlClientDriver). _
AssemblyQualifiedName)
cfg.Properties.Add(NHibernate.Cfg.Environment.ConnectionStringName, _
"connectionstring")
cfg.Properties.Add(NHibernate.Cfg.Environment. _
ProxyFactoryFactoryClass, GetType _
(NHibernate.Bytecode.DefaultProxyFactoryFactory). _
AssemblyQualifiedName)
Dim s2 As NHibernate.ISessionFactory = cfg.BuildSessionFactory
db = s2.OpenSession()
upto here it working fine and query is
Dim user As myClass = New myClass
Dim query = (From my_table In db.Query(Of myClass)() Where user.fname = name Select IMSDK_Users).SingleOrDefault
but query return nothing.
Please help Thanks
include these namespaces:
Imports System.Linq
Imports NHibernate
Imports NHibernate.Linq
and try this:
Dim query = (From c In db.Query(Of myClass)() Where c.fname = name Select c).FirstOrDefault()
I need to format a datetime as a shortdatestring in my LINQ To Entities query. I tried the following, but it does not work-
aryData =
(
From cert In db.LWCerts _
Select New With { _
.ToBeProcessedDate = cert.ToBeProcessedDate.ToShortDateString
}
).ToArray()
How can I get a date to return as a short date string ("ie: 08/05/2013")?
EDIT Here is the entire linq query-
aryData =
(From lwl In db.LWCertLoans _
Join c In db.Loans _
On c.LoanNum Equals lwl.LoanNum _
Join p In db.LWCertColls _
On lwl.CertID Equals p.CertID _
Join r In db.RespCntrs _
On r.BranchNum Equals c.BranchNum _
Join cert In db.LWCerts.AsEnumerable() _
On cert.LWCertID Equals lwl.CertID _
Where lwl.LoanNum = p.LoanNum _
Select New With { _
.ToBeProcessedDate = cert.ToBeProcessedDate, _
.CertType = cert.CertType, _
.CertCollID = p.CertCollID, _
.CertificateID = p.CertID, _
.LoanNumberTypeAndCurrencyCombined = c.LoanNum, _
.LoanType = c.LoanType, _
.CurrType = r.CurrType, _
.CollanteralBalance = c.ColCurBal, _
.SalesAdditions = p.Sales, _
.CreditMemos = p.Credits, _
.CashRemovals = p.NetCollect, _
.NonDilutiveAdjustment = p.PlusAdj, _
.Discounts = p.Discounts, _
.NonARCash = p.NonARCash, _
.DilutiveAdjustment = p.NegAdj, _
.LWCertCollsComments = p.Comments, _
.StatusCode = p.StatusCode, _
.CertLoanID = lwl.CertLoanID, _
.Modified = lwl.Modified, _
.LoanNum = lwl.LoanNum, _
.EffectiveDate = lwl.EffectiveDate, _
.RepWireNumber = lwl.RepWireNumber, _
.Advance = lwl.Advance, _
.ModifiedDate = lwl.ModifiedDate, _
.DDAAccountName = lwl.DDAAccountName, _
.LWCertLoansComments = lwl.Comments, _
.Comment = If(cert.CertType = 0, p.Comments, lwl.Comments)}).ToArray()
You should move the ToString from database to application, using AsEnumerable():
aryData =
(
From cert In db.LWCerts.AsEnumerable() _
Select New With { _
.ToBeProcessedDate = cert.ToBeProcessedDate.ToShortDateString
}
).ToArray()
That will take DateTime as is is from database and then format it on application side.
I'm trying to invoke the CreateProcess function and am having trouble with the path name for the application, which contains spaces. The documentation here instructs me to 'use quoted strings' to specify a path such as X:\My Directory\Myexe.exe but is silent on how to do this, which is a shame as I haven't managed it yet.
"""X:\My Directory\Myexe.exe"""
gets error 123 (syntax incorrect), and
"X:\""My Directory""\Myexe.exe"
gets error 3 (path not found).
Does anyone know how to do this?
Edit as asked, more code. I'm using this, with various attempts at the exe path name. This doesn't actually work but fails for other reasons (yet to be discovered).
Dim our_process_information As PROCESS_INFORMATION
Dim process_attributes As SECURITY_ATTRIBUTES
Dim thread_attributes As SECURITY_ATTRIBUTES
create_result = CreateProcess("X:\Myexe.exe", _
vbNull, _
process_attributes, _
thread_attributes, _
0, _
0, _
0, _
"X:\", _
startup_information, _
our_process_information)
This may be failing because you are passing the application name to the command line. The documentation describe them as more or less interchangable (except you can put command line arguments in the second parameter). The second argument is for the command line so you could do something like this:
create_result = CreateProcess(vbNullString, _
Chr(34) & "X:\Myexe.exe" & Chr(34), _
process_attributes, _
thread_attributes, _
0, _
0, _
0, _
"X:\", _
startup_information, _
our_process_information)
To wrap the command line in quotes and pass it to the command line argument of the function call. I've had success with doing it this way around in the past.
Edit
Fairly nice example here.
It's been a while since I've used VB6, but I think the syntax I used was:
Chr(34) & "X:\My Directory\Myexe.exe" & Chr(34)
So your code snipet would become:
create_result = CreateProcess(Chr(34) & "X:\My Directory\Myexe.exe" & Chr(34), _
vbNull, _
process_attributes, _
thread_attributes, _
0, _
0, _
0, _
"X:\", _
startup_information, _
our_process_information)
I'm fairly new to LINQ in general but I've managed to figure things out so far to get the result I want/need. The LINQ2SQL query below produces the desired results in which there are Location objects, each with their own collection of Units. The initial variable declarations are done to setup the values that I need to query from and should not be relevant to my issue but are needed for context.
The problem I'm having is that there are 400+ locations, and the current way I have the query structured, it is hitting the database for each one instead of one big query. This is causing performance to suffer greatly, taking 30+ seconds for the full result to come back which is unacceptable. I have a stored procedure SQL query that returns the results in only a second or two.
Is there a way to restructure this query so that I'm not hitting the database for each location? I'm sure it's caused by the extra "ToList()" on the Units subquery but I don't know how to shape the result without the ToList(). Any performance tweaking would be a HUGE help. Thanks for any help!
Dim curNames1 = (From ons In dc.organization_names _
Where ons.eff_date <= ssDate _
Order By ons.eff_date Descending _
Group ons By ons.organization_id Into gNames = Group _
Select New With { _
Key .Key = organization_id, _
.Result = gNames.Take(1)}) _
.SelectMany(Function(a) (a.Result))
Dim curLocs1 = (From oLocs In dc.organization_locations _
Where oLocs.eff_date <= ssDate _
Order By oLocs.eff_date Descending _
Group oLocs By oLocs.organization_id Into gLocs = Group _
Select New With { _
Key .Key = organization_id, _
Result = gLocs.Take(1)}) _
.SelectMany(Function(a) (a.Result))
Dim curStatuses1 = (From oEDate In dc.organization_conversion_dates _
Where oEDate.edate <= ssDate _
Order By oEDate.edate Descending _
Group oEDate By oEDate.organization_id Into gEDates = Group _
Select New With { _
Key .Key = organization_id, _
.Result = gEDates.Take(1)}) _
.SelectMany(Function(a) (a.Result))
Dim curCommand1 = (From oCommand In dc.organization_service_assigneds _
Where oCommand.eff_date <= ssDate _
Order By oCommand.eff_date Descending _
Group oCommand By oCommand.organization_id Into gCmds = Group _
Select New With { _
Key .Key = organization_id, _
.Result = gCmds.Take(1)}) _
.SelectMany(Function(a) (a.Result))
Dim curComponent1 = (From oCompo In dc.organization_compos _
Where oCompo.eff_date <= ssDate _
Order By oCompo.eff_date Descending _
Group oCompo By oCompo.organization_id Into gCompos = Group _
Select New With { _
Key .Key = organization_id, _
.Result = gCompos.Take(1)}) _
.SelectMany(Function(a) (a.Result))
ss.Locations = New ObservableCollection(Of Location)(( _
From map In dc.MapBackgrounds Where map.MapID = options.Map _
Let Locs = map.Schemes.SchemeLocations _
From SchemeLoc In Locs _
Where (options.Locations.Count = 0 Or _
options.Locations.Contains(SchemeLoc.Location.ID)) _
Select New Location With { _
.ID = SchemeLoc.Location.ID, .Name = SchemeLoc.Location.Location, _
.Y = SchemeLoc.Y, .X = SchemeLoc.X, _
.Country = New Country With _
{.ID = SchemeLoc.Location.Countries.ID, _
.Name = SchemeLoc.Location.Countries.country}, _
.State = If(SchemeLoc.Location.State = -1, Nothing, _
New USState With {.ID = SchemeLoc.Location.States.ID, _
.Name = SchemeLoc.Location.States.state, _
.Abbreviation = SchemeLoc.Location.States.state}), _
.Units = New ObservableCollection(Of MillitaryUnit)(( _
From curLoc In curLocs1 _
Where curLoc.location = SchemeLoc.Location.ID _
From curName In curNames1 _
Where curName.organization_id = curLoc.organization_id _
And (options.UnitSizes.Count = 0 Or _
options.UnitSizes.Contains(curName.UnitSize)) _
And (options.UnitTypes.Count = 0 Or _
options.UnitTypes.Contains(curName.UnitType)) _
From curEDate In curStatuses1 _
Where curEDate.organization_id = curLoc.organization_id _
And (options.Statuses.Count = 0 Or _
options.Statuses.Contains(curEDate.status)) _
From curCmd In curCommand1 _
Where curCmd.organization_id = curLoc.organization_id _
And (options.Commands.Count = 0 Or _
options.Commands.Contains(curCmd.service_assigned)) _
From curCompo In curComponent1 _
Where curCompo.organization_id = curLoc.organization_id _
And (options.Components.Count = 0 Or _
options.Components.Contains(curCompo.compo)) _
From curTable In curLoc.Organization.organization_tables _
Where curTable.organization_id = curLoc.organization_id _
And (options.Tables.Count = 0 Or _
(options.Tables.Contains(curTable.table_id) Or _
curTable.Tables.Any(Function(a) (options.Tables.Contains(a.parent_id))))) _
Select New MillitaryUnit With { _
.ID = curLoc.organization_id, _
.Name = curName.name, _
.IconPath = curName.icon, _
.ConversionStatus = curEDate.Status1.status, _
.ServiceCommand = curCmd.Service_Assigneds.service_assigned, _
.Component = curCompo.Components.compo}).Distinct().ToList())}).ToList())
UPDATE (3/3/2009 10:58 AM):
I managed to get the data back in one query using the query below but it's a flat table result. How can I shape this so that the organization stuff becomes hierarchical under each location? I believe I want to use something like "Group Join" but I'm not familiar with how that works. The location info is everything up to the "OrgID" column. I need to shape this data into a collection of Locations that each have a "Units" property which is a collection of the organizations that are at that location. Any guidance?
Dim locationsquery = (From map In dc.MapBackgrounds Where map.MapID = 1 Let Locs = map.Schemes.SchemeLocations _
From SchemeLoc In Locs Join curLoc In curLocs1 On SchemeLoc.LocID Equals curLoc.location _
Join curName In curNames1 On curLoc.organization_id Equals curName.organization_id _
Join curStatus In curStatuses1 On curLoc.organization_id Equals curStatus.organization_id _
Join curCommand In curCommand1 On curLoc.organization_id Equals curCommand.organization_id _
Join curComponent In curComponent1 On curLoc.organization_id Equals curComponent.organization_id _
Select New With {.LocationID = SchemeLoc.LocID, .X = SchemeLoc.X, .Y = SchemeLoc.Y, _
.LocationName = SchemeLoc.Location.Location, _
.CountryID = SchemeLoc.Location.Countries.id, .CountryName = SchemeLoc.Location.Countries.country, _
.StateID = SchemeLoc.Location.State, .StateName = SchemeLoc.Location.States.state, .StateAbbrev = SchemeLoc.Location.States.state, _
.OrgID = curLoc.organization_id, _
.OrgName = curName.name, _
.OrgLocID = curLoc.location, _
.IconPath = curName.icon, _
.ConversionStatus = curStatus.status1.status, _
.CurCmd = curCommand.service_assigneds.service_assigned, _
.CurCompo = curComponent.components.compo})
Instead of exposing the member as a List<T>, change the property type to an IEnumerable<T> or an IQueryable<T>. Then, you can remove the calls to ToList and your query should be able to be executed completely on the server in one shot.
Also, this kind of code is where LINQ to SQL starts to break down, IMO. I think that if you have a stored procedure which will give you the desired results, then you should use that, and just have LINQ to SQL handle the mapping of the returned data to your objects.
So I ended up redoing things and came up with the following solution which only queries the database twice and is MUCH faster:
Dim locationsOnly = (From map In dc.MapBackgrounds Where map.MapID = 1 Let Locs = map.Schemes.SchemeLocations _
From SchemeLoc In Locs _
Where (options.Locations.Count = 0 Or options.Locations.Contains(SchemeLoc.LocID)) _
Select New With {.LocationID = SchemeLoc.LocID, .X = SchemeLoc.X, .Y = SchemeLoc.Y, _
.LocationName = SchemeLoc.Location.Location, _
.CountryID = SchemeLoc.Location.Countries.ID, .CountryName = SchemeLoc.Location.Countries.country, _
.StateID = SchemeLoc.Location.State, .StateName = SchemeLoc.Location.States.state, .StateAbbrev = SchemeLoc.Location.States.state}).ToList()
Dim orgsOnly = (From curLoc In curLocs1 _
Join curName In curNames1 On curLoc.organization_id Equals curName.organization_id _
Join curStatus In curStatuses1 On curLoc.organization_id Equals curStatus.organization_id _
Join curCommand In curCommand1 On curLoc.organization_id Equals curCommand.organization_id _
Join curComponent In curComponent1 On curLoc.organization_id Equals curComponent.organization_id _
Join curTable In dc.organization_tables On curLoc.organization_id Equals curTable.organization_id _
Where (options.UnitSizes.Count = 0 Or options.UnitSizes.Contains(curName.UnitSize)) _
And (options.UnitTypes.Count = 0 Or options.UnitTypes.Contains(curName.UnitType)) _
And (options.Statuses.Count = 0 Or options.Statuses.Contains(curStatus.status)) _
And (options.Commands.Count = 0 Or options.Commands.Contains(curCommand.service_assigned)) _
And (options.Components.Count = 0 Or options.Components.Contains(curComponent.compo)) _
And (options.Tables.Count = 0 Or (options.Tables.Contains(curTable.table_id) Or curTable.Tables.Any(Function(a) (options.Tables.Contains(a.parent_id))))) _
Select New With {.OrgLocID = curLoc.location, _
.MilUnit = New MillitaryUnit With { _
.ID = curLoc.organization_id, _
.Name = curName.name, _
.IconPath = curName.icon, _
.ConversionStatus = curStatus.Status1.status, _
.ServiceCommand = curCommand.Service_Assigneds.service_assigned, _
.Component = curComponent.Components.compo}}).Distinct().ToList()
ss.Locations = New System.Collections.ObjectModel.ObservableCollection(Of Location)((From loc In locationsOnly _
Group Join org In orgsOnly On loc.LocationID Equals org.OrgLocID Into Orgs = Group _
Select New Location With { _
.ID = loc.LocationID, _
.Name = loc.LocationName, _
.X = loc.X, _
.Y = loc.Y, _
.Country = New Country With {.ID = loc.CountryID, .Name = loc.CountryName}, _
.State = New USState With {.ID = loc.StateID, .Name = loc.StateName, .Abbreviation = loc.StateAbbrev}, _
.Units = New System.Collections.ObjectModel.ObservableCollection(Of MillitaryUnit)((From curOrg In Orgs _
Select curOrg.MilUnit).ToList())}).ToList())
Thanks for your help casperOne!