xsharp.eu • Questions about X# definition
Page 1 of 2

Questions about X# definition

Posted: Thu May 11, 2017 7:32 am
by Anonymous
X# Experts,

I have created this new topic to post several syntax questions related to the VS 17 and SQL use based on topic: https://www.xsharp.eu/forum/public-chit-chat/288-moved-getting-going-with-sql-server-and-x-from-examplesChit-Chat: Getting going with SQL server and X# - from Examples:

I am still trying to understand the example Phil provided. Searching and reading the X# Help file was somewhat unsuccessful.

Q1: "Namespace" - it is used in each of the .Prg files. I assume it defines all prg's that belong to a soultion spread over muliple Progamm files? If I want to add a seperate prg-file I need to add the namespace in the file as well?

Q2: File DataContext.prg
"public class ForumDataContext inherit DataContext" -> where is DataContext defined. I have tried to search for it but could not find it. The X# Help file it was not mentioned. Is it part of .net and how can I the refernece for it?

Q3: Same file

public class ForumDataContext inherit DataContext
//----- properties
public property ourCustomers as Table<Customer> auto -> could find any help for Table<xxx>


Q4: File TableDataClasses
[Table(Name := "dbo.Customer")]; -> see above, "table" is now in brackets no Table<xxx>

Q5 WPF-File
if file.Exists(cFilePath)... -> Function is clear. Is it a .net function? The X# help file only states "file() as boolean" not the "exists" method.

Thanks,
Michael

Questions about X# definition

Posted: Thu May 11, 2017 8:54 am
by wriedmann
Hi Michael,
Q1: "Namespace" - it is used in each of the .Prg files. I assume it defines all prg's that belong to a soultion spread over muliple Progamm files? If I want to add a seperate prg-file I need to add the namespace in the file as well?
an namespace is a possibility to group your code. If you have two different classes "Michael" in two different namespaces, they are different.

Normally you use one namespace per assembly, or even per assembly and folder.

Of course, you can work without namespaces or put all your code in the same namespace.

To uses classes from different namespaces, you can prefix them:

Code: Select all

System.Data.Linq.DataContext{}
or use "using"

Code: Select all

using System.Data.Linq

DataContext{}
Wolfgang

Questions about X# definition

Posted: Thu May 11, 2017 8:59 am
by wriedmann
Hi Michael,
Q2: File DataContext.prg
"public class ForumDataContext inherit DataContext" -> where is DataContext defined. I have tried to search for it but could not find it. The X# Help file it was not mentioned. Is it part of .net and how can I the refernece for it?
Dr. Google is your best friend in this case:

https://msdn.microsoft.com/en-us/library/system.data.linq.datacontext(v=vs.110).aspx

Or you can use the brand new search facility:

https://docs.microsoft.com/dotnet/api

Currently, X# has no libraries, so all code you see in Phils samples come from the .NET framework (today I have read somewhere that the .NET Framework has about 14.500 classes).

To use the DataContext class, you need to add a reference to System.Data.Linq.dll to your application, and use a "using" statement or write the full path, including the namespace.

Wolfgang

Questions about X# definition

Posted: Thu May 11, 2017 9:03 am
by wriedmann
Hi Michael,

Q3: Same file
public class ForumDataContext inherit DataContext
//
properties
public property ourCustomers as Table<Customer> auto -> could find any help for Table<xxx>
Again, the Table class is defined in System.Data.Linq (but there are other classes with the same name in other namespaces).

The expression Table<Customer> is a generic, and says that the Table contains elements of type "Customer". This gives the compiler the possibility to check the elements if they are the right type - imagine that as a type of string typed array.

Wolfgang

Questions about X# definition

Posted: Thu May 11, 2017 9:08 am
by wriedmann
Hi Michael,
Q5 WPF-File
if file.Exists(cFilePath)... -> Function is clear. Is it a .net function? The X# help file only states "file() as boolean" not the "exists" method.
the .NET does not have any functions. "Exists" is a static method of the File class, i.e. a method that refers to the class and not to an specific instance of a class.
In X# functions are mapped to a hidden static class.

Again, this is a method and a class from the .NET framework:

https://docs.microsoft.com/en-us/dotnet/api/system.io.file

Wolfgang

P.S. I have left out Q4 for the moment, as I have to check it better and I'm a bit short of time

Questions about X# definition

Posted: Thu May 11, 2017 10:35 am
by Phil Hepburn
Q4

This is part of the 'ORM' in L2S. [Object Relational Mapping.] It is a way to map the Table name in SQL to the .NET class, here called 'Customer' - I called them both the same name "Customer" but you don't have to.

Also the semi colon ( ; ) is to continue the attribute onto the next line. It is convention to do this and it makes the code more readable.

For a database in SQL to work with L2S and L2E we must have tables and columns mapped. Our .NET code does this for us.

HTH,
Phil.

Questions about X# definition

Posted: Fri May 12, 2017 8:20 am
by beerhand
Thanks Wolfgang and Phil,

this was very helpful.

@Phil, please go ahead with the next steps.

Michael

Questions about X# definition

Posted: Fri May 12, 2017 9:37 am
by Phil Hepburn
Morning Michael,

Yes, I have been busy on the EF6 demo sample, even though I was silent yesterday.

For visual interest, and mental fun, below is an image of what I have in VS 2017 within my Virtual Machine :-
EF6_houseHoldDemo_01.jpg
EF6_houseHoldDemo_01.jpg (48.56 KiB) Viewed 638 times
We are starting with no SQL database at all - that will be made by our .NET X# code when it is run.

The more complex set of classes will define a 'HouseHold' entity - which is built on a House (we call that a property - as in real estate), as well as a bunch of people, (Persons) who may have a bunch of vehicles. Obviously the house has a complex class property of address.

We as coders will keep our minds on only .NET code. We will define the five classes with there members, and also add some code to define a simple mapping between classes, properties and any table columns that the EF system feels right to create in Tables.

Watch this space ..........

Cheers,
Phil.
Wales, UK.

Questions about X# definition

Posted: Fri May 12, 2017 9:41 am
by Phil Hepburn
Hi Michael,

Oh! - just thought ...........

For the Entity Framework project, I think it a good idea if I start a new thread in Pearls, so do look out for it.

Cheers,
Phil.
Wales, UK.

Questions about X# definition

Posted: Mon May 15, 2017 5:46 pm
by beerhand
For today I have tried to rebuild Phil's example. Something is terrible going wrong.

Step 1: New X# Project
Step 2: Added Textblock and Datagrid in WPF
Step 3: Created new folder: DataContext
Step 3.1: Created DataContext.prg and used Phil's code
Step 3.2: Created TableDataClasses.prg and used Phil's code
Step 4: Created Connections.prg in folder Properties

If I compile i get the following error message(s) that are linked to missing references? Google was not a real help...Absolutely no clue what to do. :(

Error 1: XS0234 The type or namespace name 'SqlClients' does not exist in the namespace 'System.Data' (are you missing an assembly reference?) WpfApplication3

Error 2: XS0234 The type or namespace name 'Services' does not exist in the namespace 'System.Data' (are you missing an assembly reference?)

Error 3: XS0234 The type or namespace name 'Linq' does not exist in the namespace 'System.Data' (are you missing an assembly reference?)

There are a few more but I think lets fix these first maybe the others go away.

Thanks
Michael