icaaqMedlem sedan okt. 20005 273 inlägg Tjenare.
Jag har laddat hem Wilson ORMapper och jag tror att jag behöver lite hjälp med att komma igång.
Jag hade tänkt att jag skulle fylla en datagrid med ett ObjectSet. Jag har gjort följande.
Skapat en mappings.config, skapat alla olika klasserna och även skapat en Manager.cs
Sen testar jag följande i *.aspx.cs
[red]
protected System.Web.UI.WebControls.DataGrid DataGrid1;
public static ObjectSpace Manager;
private void Page_Load(object sender, System.EventArgs e)
{
[b]ObjectSet contacts = Manager.GetObjectSet(typeof(Category), string.Empty);[/b]
DataGrid1.DataSource = contacts;
DataGrid1.DataBind();
// Put user code to initialize the page here
}
[/red]
men jag får System.NullReferenceException: Object reference not set to an instance of an object.
på den feta raden
Kan jag inte använda den på detta viset.
mv icaaq
GladhMedlem sedan maj 20012 812 inlägg public static ObjectSpace Manager;
Borde du inte skapa en instans av objectspace
public static ObjectSpace Manager = new ObjectSpace();
Har dock aldrig sysslat med Wilsons så den kanske använder sig av static Methods, men så fall borde raden inte behövas.
- M
icaaqMedlem sedan okt. 20005 273 inlägg Jag tror att den använder sig av static methods.... så här ser Manager.cs ut nu
[red]
using System;
using System.Configuration;
using Wilson.ORMapper;
namespace spira.Data
{
sealed public class Manager
{
private static ObjectSpace engine;
public static ObjectSpace Engine
{
get { return Manager.engine; }
}
static Manager() {
string mappingFile =AppDomain.CurrentDomain.BaseDirectory + @"Mappings.config";
string connectString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\Isac Backlund\Skrivbord\WilsonORMapperDemo\WilsonORMapperDemo\northwinddemo.mdb";
string providerType = "Access";
Provider provider;
try { provider = (Provider) System.Enum.Parse(typeof(Provider), providerType, true); }
catch { provider = Provider.MsSql; }
// Note: Non-Zero Session is needed for Server Applications like Web
engine = new ObjectSpace(mappingFile, connectString, provider, 20, 5);
}
private Manager()
{
// Note: Static Class -- All Members are Static
}
}
}
[/red]
blir du klokare av det :OO
mv icaaq
PDahlenMedlem sedan apr. 2004778 inlägg Min gissning är att det är contacts som behöver skapas som ett New Objectset, precis som man måste göra med vanliga DataSet.
Så sätt dit ett = New Objectset innan du försöker fylla contacts.
icaaqMedlem sedan okt. 20005 273 inlägg Gör jag så här
[red]
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid DataGrid1;
public static ObjectSpace Manager;
[b]public ObjectSet contacts = new ObjectSet();[/b]
private void Page_Load(object sender, System.EventArgs e)
{
ObjectSet contacts = (ObjectSet)Manager.GetObjectSet(typeof(Category), string.Empty);
DataGrid1.DataSource = contacts;
DataGrid1.DataBind();
// Put user code to initialize the page here
}[/red]
så får jag c:\inetpub\wwwroot\ormapper\WebForm1.aspx.cs(24): No overload for method 'ObjectSet' takes '0' arguments
mv icaaq
PDahlenMedlem sedan apr. 2004778 inlägg Om man kollar exemplet i ObjectSet.cs så står det att man ska använda
ObjectSet contacts = Manager.GetObjectSet(typeof(Category), string.Empty);
Så ta bort din Cast och kolla så att Category existerar.
Eftersom du ska ha fram typeof(Category) så måste ju Category existera. Så det kan vara det som orsakar felet.
icaaqMedlem sedan okt. 20005 273 inlägg Category existerar i samma namespace som allt annat Spira.Data
Jag tycker att det är en lite dålig exempel-fil som visas på ormapper.net.
Den verkar vara mer inriktad på winforms.....om jag inte är ute o cyklar nu.
mv icaaq
PDahlenMedlem sedan apr. 2004778 inlägg Ja, det kan säkert stämma att exemplen är för Winforms, men när det gäller den rena C#- koden så spelar det ingen roll om det är Win eller Webb forms.
Du ska skapa ObjectSet contacts på samma sätt i både Win och Webb, så som visas i exemplet.
Blir det någon skillnad om du tar bort din Cast?
Prova även att lägga en testrad innan Objectset raden.
Testa att skriva ut typeof(Category) och se om det orsakar felet.
Dvs.
Response.Write(typeof(Category))
icaaqMedlem sedan okt. 20005 273 inlägg Om jag skriver ovanstående kod så får jag fram
spira.Data.Category
Så det är inte felet. Jag tror som du att felet ligger i contacts. Men jag vet inte hur jag ska initiera det objectsetet.......
Förslag?
mv icaaq
PDahlenMedlem sedan apr. 2004778 inlägg Provade du med = New Objectspace
på Manager nån gång som rekommenderat ovan?
icaaqMedlem sedan okt. 20005 273 inlägg
icaaq skrev:
Gör jag så här
[red]
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid DataGrid1;
public static ObjectSpace Manager;
[b]public ObjectSet contacts = new ObjectSet();[/b]
private void Page_Load(object sender, System.EventArgs e)
{
ObjectSet contacts = (ObjectSet)Manager.GetObjectSet(typeof(Category), string.Empty);
DataGrid1.DataSource = contacts;
DataGrid1.DataBind();
// Put user code to initialize the page here
}[/red]
så får jag c:\inetpub\wwwroot\ormapper\WebForm1.aspx.cs(24): No overload for method 'ObjectSet' takes '0' arguments
mv icaaq
Om det är så här du menar så .... Ja det har jag testat ;)
mv icaaq
PDahlenMedlem sedan apr. 2004778 inlägg Nej, inte ObjectSet, ObjectSpace.
public static ObjectSpace Manager = New ObjectSpace();
icaaqMedlem sedan okt. 20005 273 inlägg Samma fel...
No overload for method 'ObjectSpace' takes '0' arguments
Jag blir inte klok på hans exempel......
mv icaaq
PDahlenMedlem sedan apr. 2004778 inlägg Jag tycker att det saknas saker i din kod.
Pauls exempel i ObjectSpace.cs filen är
public static ObjectSpace Manager;
string mappingFile = @"C:\Data\Examples\Contacts\Mappings.config";
string connectMsSql = "Server=(local);Database=Contacts;Trusted_Connection=True;";
Manager = new ObjectSpace(mappingFile, connectMsSql, Provider.MsSql);
Men du försöker skapa ett ObjectSpace utan att ange mapping filen och dbkopplingen.
Kolla i ObjectSpace.cs på de olika konstruktörerna som finns och på de exempel som står i samband med varje funktion.
Om man läser detta så ser man att din kod saknar vitala delar.
icaaqMedlem sedan okt. 20005 273 inlägg Ok det är nog jag som tänkt lite fel.....
Jag tänkte att min ovanstående Manager.cs initierade mitt ObjectSpace....det p.g.a denna rad i hans exempel.
public static ObjectSpace Manager; // See Initialization Example
Jag ska testa lite med din kod....
mv icaaq
PDahlenMedlem sedan apr. 2004778 inlägg Felet du gör är att du har skapat din egna klass Manager, men istället för att instansiera en Manager så använder du ändå ObjectSpaces.
public static ObjectSpace Manager;
Ovanstående innebär att du skapar ett ObjectSpace objekt som heter Manager. Men du har skapat en Manager klass och bör då använda
public static Manager myOsManager:
Men du måste ändå instansiera ObjectSpaces i Manager klassen på rätt sätt.
icaaqMedlem sedan okt. 20005 273 inlägg Om du skulle använda hans ORMapper och fylla en datagrid.....hur skulle det se ut? För jag tycker inte att det skulle behövas så mycket kod.. eller??
mv icaaq
PDahlenMedlem sedan apr. 2004778 inlägg Har inte hunnit använda den så mycket ännu, och jag kan hålla med dig om att hans exempel i vissa fall verkar okompletta. Men ta t.ex. ObjectSpace, då finns exempel i samband med konstruktörerna på hur man skapar objektet.
Så följande borde funka.
string mappingFile = @"C:\Data\Examples\Contacts\Mappings.config";
string connectMsSql = "Server=(local);Database=Contacts;Trusted_Connection=True;";
public static ObjectSpace Manager = new ObjectSpace(mappingFile, connectMsSql, Provider.MsSql);
ObjectSet contacts = Manager.GetObjectSet(typeof(Category), string.Empty);
DataGrid1.DataSource = contacts;
DataGrid1.DataBind();
icaaqMedlem sedan okt. 20005 273 inlägg Jag fick det enklaste av enklaste exemplet att funka till slut...
[red]
ObjectSpace myManager = new ObjectSpace(@"C:\Inetpub\wwwroot\ormapper\Mappings.config", @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Inetpub\data\northwinddemo.mdb", Provider.Access);[/red]
WeeEEeEEeEe Tack PDahlen
Nu ska jag bara testa vidare.... och implementera den i min DAL eller något...
mv icaaq
icaaqMedlem sedan okt. 20005 273 inlägg Nu undrar jag hur ni gör när ni vill använda er av avancerade SQL-satser, typ innerjoins eller unions? använder ni er av ORMappern då med eller fyller ni objekten själva, med t. ex en datareader...
mv icaaq