There's nothing wrong with using natural keys instead of surrogate ones. CSLA puts no requirements on the way you design your database. If you want to do that, go right ahead.
As for the debate of natural vs. surrogate keys... well, folks can have some strong feelings on that one. The basic problem with natural keys is that they tend to be values that are entered by the user. Thus, they need to be editable, and it's not always A Good Thing to have your table's primary key editable. Once you have child records established, it can become a relatively expensive operation to cascade your key changes - even if the database does it for you. Plus, with an editable primary key, you can't tell whether the value is unique until after the user has done all the data entry and you try to save the record. It's not a huge deal for the UI, but it's extra coding you have to write that you don't have to deal with using surrogate keys. Lastly, surrogate keys can be smaller than a natural key (depending on what type of field you use), which makes for faster querying.
Having said that, there are a number of well-respected DBA-type folks out there who rank surrogate keys just below the bubonic plague. They site your argument about having to create the unique constraint anyway, as well as the fact that the key generated is arbitrary and thus has no bearing at all on the data it represents. From their point of view, if you have to make up this key field, you haven't done proper data analysis to find the real key field(s). In addition, especially with things like identity fields, the key value assigned is completely based on the order in which the data is saved to the table, which doesn't follow from a set point of view - by definition, sets have no order. This also makes the data more complicated to copy over, since order is now important. There are lots of things database vendors have done over the years to mitigate some of the issues with surrogate keys, but in the end it's all extra SQL that has to be fiddled with.
If we go with your example, an employee may have an Employee ID assigned to them by HR, and the HR database probably does use that as the primary key. But you're also assuming that I (or my users) have access to the HR employee information, which is not as common as you might think. If I do have access, then I might use their EmployeeID as the key value. If I don't - well, I need to use something, and it may not be possible/practical to get the company's EmployeeID. Either way, I'd also probably construct the UI to use a dropdown list of employees. This shields my users from whatever ID scheme I choose.
Having said all of this, I tend to fall into the surrogate-key family more often than not. Most of my co-workers over the years have been in the surrogate-key family as well. I will say that I'm not a big fan of GUID's as my key values, even though they do help to solve the "I need the key before the database generates it" issues. Regardless of which type you use, though, they usually are simpler - it's only one field to deal with; the database usually takes care of it for you; and all tables work the same, so you can encapsulate the code in a base class and forget about it. But I have found myself using something of a hybrid approach lately - using surrogate keys for the main tables (Customers, Orders, etc.), but creating a sort of natural key in the child tables (OrderID + Line Item Sequence, for example). It's still all handled by the system, and while it does imply an order to the data, I find there's almost always some kind of order to the data anyway.
HTH
- Scott