|
I tell you where Linq is more interesting - it's the point where you use it to perform joins on collection objects. That's when the fun begins. I agree though that Linq to Sql can lead you to do too much outside of the database and you have to be really careful that you don't pass the data context away from the DAL.
|
|
|
|
|
Pete O'Hanlon wrote: and you have to be really careful that you don't pass the data context away from the DAL.
Why ?
|
|
|
|
|
N a v a n e e t h wrote: Pete O'Hanlon wrote:
and you have to be really careful that you don't pass the data context away from the DAL.
Why ?
If the context is available outside of the DAL, then you can completely bypass the DAL. In other words, you could bind directly to the data from the database. This means that you've suddenly gone from a neat n-tier architecture to one where the GUI has knowledge of the database itself (and this isn't what the GUI is supposed to do). Have a read about the principles behind n-tier architecture and separation of layers.
|
|
|
|
|
Thanks Pete.
Pete O'Hanlon wrote: Have a read about the principles behind n-tier architecture and separation of layers.
Yes I do have basic idea on them. But when it is mixed up with LINQ, I am confused.
|
|
|
|
|
N a v a n e e t h wrote: But when it is mixed up with LINQ, I am confused
You're not the only one. I'm currently working with Marc Clifton to try and define some best practices which hopefully will alleviate some of the confusion.
|
|
|
|
|
You can query your domain objects using LINQ. They can translate the query into a storage mechanism specific query.
Our current query API (in Diamond Binding) is based on the domain objects - so when you use Expressions or OQL you are querying the domain - say Employee.Manager.Name == Fred. This will be translated under the hood into an appropriate SQL query to return a List< Employee >
I think the temptation is there to bypass your DAL, which is bad, mmkay - but allowing your domain objects to be queried ad-hoc (using the _domain_ terms) is a big productivity boost, and doesnt compromise your architecture. Of course this means your DAL has to be 'smart' enough - which generally isn't the case when you are using 'dumb' codegen to spit out a whole DAL.
|
|
|
|
|
|
Oh I agree. The key here is the flexibility of your datalayer and the strength of your design.
|
|
|
|
|
Pete O'Hanlon wrote: I'm currently working with Marc Clifton to try and define some best practices which hopefully will alleviate some of the confusion.
Cool. So I am expecting another great article. Looking forward on reading it
|
|
|
|
|
I have made a small software which requires .Net framework 2.0 and Sql server Express.I want to make a setup file which automatically installs these two components.
How can i achieve this??
|
|
|
|
|
Don't cross post.
I answered your question over in the Visual Studio forum.
|
|
|
|
|
I have the 1.0, 1.1, and 2.0 frameworks installed on my PC. I'm developing in VS03. When I build and run my application is it running against the 1.1 or 2.0 framework?
Otherwise [Microsoft is] toast in the long term no matter how much money they've got. They would be already if the Linux community didn't have it's head so firmly up it's own command line buffer that it looks like taking 15 years to find the desktop.
-- Matthew Faithfull
|
|
|
|
|
Visual Studio .NET 2002 -> .NET Framework 1.0
Visual Studio .NET 2003 -> .NET Framework 1.1
Visual Studio 2005 -> .NET Framework 2.0 or 3.0 (if Visual Studio extensions are installed)
Visual Studio 2008 -> .NET Framework 2.0, 3.0, or 3.5 (selectable)
|
|
|
|
|
Thanks, that's what I thought. I was asked to make sure the newer framework wasn't claim jumping somehow.
Otherwise [Microsoft is] toast in the long term no matter how much money they've got. They would be already if the Linux community didn't have it's head so firmly up it's own command line buffer that it looks like taking 15 years to find the desktop.
-- Matthew Faithfull
|
|
|
|
|
There is one subtle complication. If you're using VS 2008 and wish to use features that are in either .NET 2.0 SP1 or .NET 3.0 SP1 then you should select .NET 3.5 as a target. Don't ask!
Kevin
|
|
|
|
|
Dave's answer is correct for EXEs. For DLLs, the answer is 'whatever version the executable loaded'. If the CLR is invoked via COM, where no version of the CLR was already loaded into the process, the latest version installed on the system will be loaded.
You can also use supportedRuntime elements in XML configuration for managed and unmanaged EXEs to override the default rules, unless (I assume) the program uses the CLR hosting APIs to load a specific version.
If you do redirect a program to use a different version of the CLR you will have to use a version of Visual Studio matching the new CLR version to debug, as VS .NET 2003 can only debug CLR 1.1 processes and VS 2005 only CLR 2.0.
DoEvents: Generating unexpected recursion since 1991
|
|
|
|
|
It's interesting. How can I test? I have .NET 1.1 to 3.5.
The way I think to test is that ~
- Create the Window Form project in VS 2003. (I'm not sure whether I should add or not )
- Add the Class Library in VS 2003
- Add that class library as a reference in winform project
- Write the code that can be used in 1.1 and is obsoleted in 3.5 (I have to find that obsoleted code. )
- Call that function from Windows Form
- Run the application.
Will the exception be thrown if I run the winform? OR how can I test?
Thanks. Mike.
|
|
|
|
|
Hi,
I have a delegate in my remote object. And i want to assign a client side method to that delegate from client. so that the server can call the client side method. How should i do that. I dont want to pass any object frm client to server onorder get it registered there
|
|
|
|
|
I don't recommend doing this (events or callbacks) for various reasons. Performance being one issue, stability being another. This may have changed with the release of Windows Communication Foundation (WCF), but I haven't had the time to try it out myself, let alone test it in a scalable situation.
|
|
|
|
|
Take a look at my article - Persistent Events (here in codeproject). I think it has an answer for your question as well
==========================================================
Alexander Arlievsky
Chief Software Architect & CTO, mPrest Ltd
alex@mprest.com
"The most valuable tools for debugging are brains"
==========================================================
|
|
|
|
|
Hi,
I have a TextBox style in which I want to have a TextBlock that gets the text from the TextBox. The reason is that I want the text to use ellipsis when it's not selected. Since you can't use that on a TextBox I thought up this little workaround.
I tried this (never mind the formatting):
<ScrollViewer SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" x:Name="PART_ContentHost"/><br><br />
<TextBlock Padding="3" Visibility="Visible" ToolTip="{Binding Path=Text, ElementName=PART_ContentHost}" Text="{Binding Path=Text, ElementName=PART_ContentHost}" TextTrimming="CharacterEllipsis" x:Name="Tbl" TextWrapping="NoWrap" HorizontalAlignment="Right" Width="172.8" VerticalAlignment="Bottom" Height="24.6" Margin="0,0,-90,0" d:LayoutOverrides="HorizontalAlignment, VerticalAlignment"/></br>
This works with the ToolTip but not the Text. Does anybody know why that is?
And as I mentioned I'm using this in a style so I can't use any C#.
I appreciate all help I get.
Thanks,
Peter
|
|
|
|
|
I just solved it myself.
Of some reason the tooltip works with the normal, easy binding but the text needs a little more. I solved it by using:
Text="{Binding Path=Text, RelativeSource={RelativeSource AncestorType={x:Type TextBox}}}"
//Peter
|
|
|
|
|
Hi,
I have an application that needs to behave differently depending on the user running the application. (I.e. I need to block the admin functions from general users)
The app uses a SQL server database. Is it safe to store the windows user's SSID along with their permissions/restrictions and then use WindowsIdentity.GetCurrent().User.Value and compare this with the values stored in the database when the app is run to do my restrictions?
(User's don't have permissions to write to the database, so there's no risk of a user changing their own settings)
I'm making the assumption here that it's not possible to change windows user SSIDs. Would it be safer to hash the SSID before storing it and compare that instead?
What about the risk of someone changing the in memory value of the current user's SSID after it is loaded, but before it is hashed and compared to the stored value?
What should I be doing instead of this to restrict what different users can do.
Many thanks,
Simon
|
|
|
|
|
Simon Stevens wrote: The app uses a SQL server database. Is it safe to store the windows user's SSID along with their permissions/restrictions and then use WindowsIdentity.GetCurrent().User.Value and compare this with the values stored in the database when the app is run to do my restrictions?
Why not just the user name? Why make things more difficult for yourself.
Simon Stevens wrote: Would it be safer to hash the SSID before storing it and compare that instead?
You would do this for a password. Not an identifier.
Simon Stevens wrote: What about the risk of someone changing the in memory value of the current user's SSID after it is loaded, but before it is hashed and compared to the stored value?
I don't know your users. Do you think they have that level of technical expertise? I know I don't (although I could find out, I suppose).
|
|
|
|
|
Colin Angus Mackay wrote: Why not just the user name? Why make things more difficult for yourself.
No real reason, Id just came to mind first, also, can't user names be changed?
Colin Angus Mackay wrote: You would do this for a password. Not an identifier.
My concern was that if it is possible to change your user's SSID, you could just change it to match others in the database. By hashing the stored value no one would be able to do this
Colin Angus Mackay wrote: I don't know your users. Do you think they have that level of technical expertise? I know I don't (although I could find out, I suppose).
I doubt it, but if i'm going to use arguments like that I would just build the app with an unsecured database and make the assumption that none of my users would know how to access a SQL database anyway. Surely I should aim to be secure, regardless of the probable technical ability of the users.
I suppose my real question here is "is it possible to change a users SSID?" (either deliberatly to impersonate another user to gain permissions, or inadvertantly and lose the access the user should have).
Simon
|
|
|
|