Rob Relyea - There's Something About XAML

I recently caught up with some of the technical minds behind ADO.NET's Entity Framework: Architect Michael Pizzo, Technical Lead Pablo Castro and Director of Program Management Britt Johnston.
What's an Entity Framework, you ask? Well, watch and learn all about this new ADO.NET development framework/paradigm. For the ADO developers out there, you'll be quite pleased with the architectural direction ADO has taken. Enjoy. Here are some links to relelated ADO.NET information: Pablo’s post with links to detailed docs: https://blogs.msdn.com/adonet/archive/2006/07/11/662447.aspx Screencast demo’ing ADO.NET vNext in action: https://blogs.msdn.com/adonet/archive/2006/07/11/662454.aspx ADO.NET team blog: https://blogs.msdn.com/adonet/ Data Programmability team blog: https://blogs.msdn.com/data/ Britt’s first blog post (recent) sharing his thoughts on conceptual schema: https://blogs.msdn.com/data/archive/2006/07/14/665780.aspx MSDN Data Developer Center: https://msdn.microsoft.com/data/ |
AlphaKahuna wrote:Me thinks the message of the video is not the phrase "me thinks"
Damn i want this now!
I wish you had gone into more detail as to how it works with the database. For example: do i have to create stored procedures that i then map using that map editor thingymebob
Or does it magically do all that for me
This is majorly cool! Can't wait to get the bits.
Couple of questions:
1. Isn't this a complete superset of DLINQ? Is there anything DLINQ can do that you guys can't do? If that is true: Why have both? Generally, it would be nice to clear that up and let us know how this is going forward.
2. To follow up on the "is it debuggable" question. Is it testable? I.e. do you have a story for people that do TDD? Is there good support to replace these things with mocks etc? Would be great if these things would be taken into account from the start!
3. This is only minor, but still. What about refactoring? If I change a name in the mapping definition, will that change trickle via refactoring rename down into the places where I query in code?
Cool stuff! David
I say this all the time, but I guess I haven't said it here yet:
Charles rocks as an interviewer!
[and he's a hottie too ]
Thanks for the kind words, Alpha!
C
JoshRoss wrote:Interesting... It almost reminds me of English Query. English Query was very interesting although it made me realize that people are really bad at asking questions.
Pablo [MSFT] wrote:
August...we're almost there. You'll hear the noise when we put the stuff out there
-pablo
davida242 wrote:Another thing I really didn't like about the video was that data binding in WinForms was used. We never really saw what came back from these queries! We saw the queries, and we saw that the result of the queries (whatever it was) was assigned to the datasource. And some sentence along "now databinding does all the magic". That was just terrible and added to the "wow, we show you lots of magic". It would have been much better to go with a command line app, and then just loop through the results, and show how you get back strongly typed objects. And type that during the interview! It is great that you prepare some super magic code that shows stuff, but the viewer of the show will have no chance to really understand what you are doing with that sort of thing.
Still way cool technology!
christianlott wrote:First off, Pablo talks too fast and I can barely understand his accent - even if he speaks gramatically correct english.
christianlott wrote:What upset me beyond not being able to understand Pablo's overexcited hyper-speak is that the only time 'VIEWS' were mentioned it was in passing and with a 'just trust MSR'.
Looking back and having now read a paper on it, I think I understand. I just hate watching an hour long video with people rushing through concepts, the camera going in and out of focus and someone with such a thick accent speaking so fast.
I think there needs to be some balance between the 'live' aspect of these interviews and some kind of coherency and organization.
christianlott wrote:... don't you think 'conceptual' and 'logical' are the wrong words? If the UI code is called 'conceptual', how is 'logic' defined for you anyway? I forgot, this is MS-speak. You guys have your own definitions and change phraseology everytime there's a new percieved market. The distinction you made seems more like a sales gimmick than a definition for a legitimate term.
Quit the kiddie talk!
To me, a relational database diagram IS *conceptual*!
Charles wrote:
This is why we have Screencasts...
Charles wrote:I think Pablo is planning on producing some.
C
Pablo [MSFT] wrote:Thanks for the feedback. Here are a few comments:
Feedback taken. I know I tend to talk fast, I just get too exited about the stuff; also, the informal nature of C9 interviews makes it worse for me (although I think it's a good thing overall). I'll try and go slower next time.
Good feedback. Our idea was to have a mix of documents (which you already found) and informal videos with different content; the docs would go through the details, and the video would show the take of the team. That said, if it didn't work we may need to work on that (including my accent)
May be we should have given more background material. The terminology we used is for the most part made of well-known industry and academia terms (there are some specifics required to describe new or specialized elements, of course).
Chen's paper from '76 introduced a "conceptual" layer and discussed "multilevel views of data". The article below from Wikipedia has a summary of the "Entity-relationship" model, the relationship beween the conceptual, logical and physical layeres, and pointers to Chen's papers and other resources:
http://en.wikipedia.org/wiki/Entity-relationship_model
The Entity Data Model is an entity-relationship model and borrows terminology from it.
-pablo
Pablo, where are you from? In the first video (the one that vanished) your desktop background made me think you were Mexican or Central American. But in this video when you started "proshecting" the columns I got the idea that you were Argentinean or Uruguayan.
By the way, don't take a hit about your accent. We just live in a big world. I actually envy how fast you can speak in English without making mistakes
DiegoV wrote:Pablo, where are you from? In the first video (the one that vanished) your desktop background made me think you were Mexican or Central American. But in this video when you started "proshecting" the columns I got the idea that you were Argentinean or Uruguayan. By the way, don't take a hit about your accent. We just live in a big world. I actually envy how fast you can speak in English without making mistakes
davida242 wrote:Another thing I really didn't like about the video was that data binding in WinForms was used. We never really saw what came back from these queries! We saw the queries, and we saw that the result of the queries (whatever it was) was assigned to the datasource. And some sentence along "now databinding does all the magic". That was just terrible and added to the "wow, we show you lots of magic". It would have been much better to go with a command line app, and then just loop through the results, and show how you get back strongly typed objects. And type that during the interview! It is great that you prepare some super magic code that shows stuff, but the viewer of the show will have no chance to really understand what you are doing with that sort of thing.
Still way cool technology!
staceyw wrote:
But that is all databinding does. It takes that strongly typed List and put the elements in the proper textbox (in simple terms). So iterating over the list manually would not really show much more IMO.
Pablo [MSFT] wrote:
You got it right, I'm originally from Argentina (Buenos Aires).
staceyw wrote:2) Create the DB schema from the Entity model. Deploy a local or remote db via the XML entity schema.
staceyw wrote:
Have *all .Net types, get rid of nullable value types in the db and get rid of native sql types and while your at it - get rid of TSQL.
staceyw wrote:
Allow any New query languages to be first class in the DB - all equal to TSQL, not ontop of TSQL. Maybe xml becomes the common denominator that the DB takes. All query languages, just send and receive xml and that is what is parsed instead of TSQL. ... Things like Linq and Entities will be first class citizens of the db. 2-tier will become a more popular model again.
AlphaKahuna wrote:I say this all the time, but I guess I haven't said it here yet:Charles rocks as an interviewer!
[and he's a hottie too
]
Sorry to go off-topic, but I feel a bit discriminated.
There were different posts a while ago where a woman was interviewed, and someone made a remark that she was good looking, and people were shocked and called him a sexist, and felt that he didn't respect the woman for her capabilities and talents. And now Alpha calls Charles a hottie, and the only response she gets is 'Thanks for the kind words'?
What if I said 'Charles is a hottie'? Would I also get a 'Thanks for the kind words'?
I'm not trying to be a jërk, but I'm just curious if someone can explain me this.
TommyCarlier wrote:
AlphaKahuna wrote: I say this all the time, but I guess I haven't said it here yet: Charles rocks as an interviewer!
[and he's a hottie too
]
Sorry to go off-topic, but I feel a bit discriminated.
There were different posts a while ago where a woman was interviewed, and someone made a remark that she was good looking, and people were shocked and called him a sexist, and felt that he didn't respect the woman for her capabilities and talents. And now Alpha calls Charles a hottie, and the only response she gets is 'Thanks for the kind words'?
What if I said 'Charles is a hottie'? Would I also get a 'Thanks for the kind words'?
I'm not trying to be a jërk, but I'm just curious if someone can explain me this.
TommyCarlier wrote:
AlphaKahuna wrote: I say this all the time, but I guess I haven't said it here yet: Charles rocks as an interviewer!
[and he's a hottie too
]
Sorry to go off-topic, but I feel a bit discriminated.
There were different posts a while ago where a woman was interviewed, and someone made a remark that she was good looking, and people were shocked and called him a sexist, and felt that he didn't respect the woman for her capabilities and talents. And now Alpha calls Charles a hottie, and the only response she gets is 'Thanks for the kind words'?
What if I said 'Charles is a hottie'? Would I also get a 'Thanks for the kind words'?
I'm not trying to be a jërk, but I'm just curious if someone can explain me this.
staceyw wrote:Simply great stuff guys. BTW - Pablo, I love your accent - good job.
Here are some thoughts. Probably already on feature list:
1) UI mapper between entities and logic DB (BizTalk like)
staceyw wrote:2) Create the DB schema from the Entity model. Deploy a local or remote db via the XML entity schema.
staceyw wrote:3) Client-side query tracer. Should be easy and you know what query you sent and data bytes received.
4) Maybe some simple perf counters on query objects. (Timespan, etc)
staceyw wrote:5) Why couldn't Entity SQL also be a .Net language or language extention with strong typing instead of hidden inside quotes?
staceyw wrote:6) Bidirectional Refactor. Refactor the Entity model, and update the DB. DBAs will hate it, but I like it. Moreover, refactor the DB updates entity model. Especially helpful during dev. Naturally, this should be integrated VS for DB product.
7) Self optimizing normalization in the logic layer. With the abstration, we don't need to see it anyway, so the the DB could change itself and we still see the entity model the same. Maybe V2.
staceyw wrote:...get rid of TSQL. Allow any New query languages to be first class in the DB - all equal to TSQL, not ontop of TSQL. Maybe xml becomes the common denominator that the DB takes. All query languages, just send and receive xml and that is what is parsed instead of TSQL.
schrepfler wrote:...you always show cases where the DB exists before the app. Instead of this data driven approach will there be a clear model/domain driven approach where we write our entities ourselves? If so what will the ways to express these relationships be, attributes, xml, reflection, other?
schrepfler wrote:How are transactions handled?
schrepfler wrote:Will there be a rich exception model?
schrepfler wrote:Can entities be lazily fetched and how to reattach them to fetch children if it's in another domain?
schrepfler wrote:Can we generate and update the schema directly from the model?
Pablo [MSFT] wrote:
May be one day I'll do a "deep dive" episode to explain how the system works internally, how command trees are used, etc.
-pablo
schrepfler wrote:Well, although I like the xml approach (it's least invading) I can't help but notice that the java world passed from xml to annotations (which might be also a limitation, java doesn't have partial classes so there can be one view to a model or else they'd need to copy the code that would lead to more mantainence).
schrepfler wrote:As far as the exceptions model the only concrete example I know of is in the spring framework where they have their own exception hieararchy and they provide a way to translate the concrete vendor's exception (and it's amazing how many orm's they support).
If you can answer any of my doubts, I will be grateful. My boss is pressing me to evaluate O/RM products, and I am telling him to way for your framework everyday
DiegoV wrote:As I mentioned before, one of my great concerns is how team development will look like with the Entity Framework. I took some time to detail my thoughts:
First, many real life projects are partitioned in modules, so their data layers are partitioned likewise.
Often, there are sets of tables that are used exclusively in each module, and a set of tables that are common to all. Yet, there are some tables that are resued in more than on application (typical examples are security, navigation, etc).
Besides, building a useful data layer is not done in one step nor does it take a single day. It is more often an evolutionary and error-prone process in which a programmer “imports” objects from the database each time he/she realizes they are mentioned in the specification.
DiegoV wrote:
- Partitioning of the conceptual model in multiple files and assemblies.
- Referencing and extending (entity inheritance) between entities defined in separate files and assemblies.
- Creating reusable “libraries” containing entities and mappings that can be reused by different modules or different applications.
- "Incremental" reverse engineering of databases (I think this one is already in the graphical design tool).
- Support for basic refactorings (unification, replacement, renaming, etc).
- Very readable and maintainable XML (it should be easy to merge two files with a source code comparison tool).
- Efficient and easy serialization of entities and entity sets outside the database.
- Separation of the conceptual model from the persistence logic (take a look at what Steve Lasker does with typed datasets).
- A migration tool for typed datasets XSDs.
- A degree of resiliency to some schema changes.
ebdrup wrote:Great stuff!
I would really like to see more on how you create the actual Entity mappings, when will the beta be availabel for download and when will this ship?
Pablo [MSFT] wrote:
5. While you can re-factor the model (and we'll propagate the changes to your object model in CLR classes), we won't automatically propagate the changes through the mapping, at least not this time...
davida242 wrote:
Pablo [MSFT] wrote:
5. While you can re-factor the model (and we'll propagate the changes to your object model in CLR classes), we won't automatically propagate the changes through the mapping, at least not this time...
Not propagating a rename into the DB (that is what you mean by "through the mapping", right?) seems perfectly fine! Database refactorings are a complicated class of things by themself, as you have to take care of the change scripts that need to deployed etc.
What would be nice is if a rename of a database object in the new VS Team Database role would propagate into the mapping fileJust into it, not through it, actually.
Also, when you say that renames will propagate into the CLR objects. Does that mean you will use the rename refactoring code that is in VS to do that? That would be incredibly cool! If I change the name of a property in my entity, and all C# code that references that property in code (i.e. not the class that represents the entity, but the code that uses that class) would update automatically.
Pablo [MSFT] wrote:
1. Yes, you can partition the model in multiple files
Pablo [MSFT] wrote:
2. Yes, you should be able to do this (although some glitch here or there may complicate things)
Pablo [MSFT] wrote:
3. Yep (you may need to deploy a library + metadata)
Pablo [MSFT] wrote:
4. We currently don't have plans for automated incremental reverse engineering. Currently we do "one shot" reverse engineer and then you can maintain the resulting model by hand. Is that something you could live with for the initial release?
Pablo [MSFT] wrote:
5. While you can re-factor the model (and we'll propagate the changes to your object model in CLR classes), we won't automatically propagate the changes through the mapping, at least not this time...
Pablo [MSFT] wrote:
6. "very readable"...well, it's XML, so you can read it; in my experience, in most cases you can design "good looking" XML that works well for small/medium data-sets, but as the amount of data you need to represet grows, things get tricky regardless of the actual schema; there are other aspects that need to be considered and balanced, such as the evolution of the schema across versions of the framework and making sure there are no ambiguities. That said, we are looking at making sure the XML is relatively clean.
Pablo [MSFT] wrote:
7. Our plan is to have a mechanism to enable shipping of entities across tiers and allow for the system state to be reconstructed later on, however, that doesn't not include taking care fo serialization itself. We assume that you'd use any of the already-existing serialization infrastructures.
Pablo [MSFT] wrote:
8. Following the typed-table pattern, what you're saying is that you'd like the option to have the "typed ObjectContext" in one assembly and the domain classes in another one, is that right?
Pablo [MSFT] wrote:
9. We don't currently have one planned, but hey, we do have a developer community that might be interested in contributing a few of these nice tools
Pablo [MSFT] wrote:
10. The mapping infrastructure does provide a good degree of isolation from schema changes for the applications built on top of a conceptual model. This requires that you manually update the mappings to map to the new schema, but other than the map everything else should go untouched (of course, there are certain types of changes that we cannot compensate for).
Pablo [MSFT] wrote:
Hope this helps clarify some of the issues. This provided me with good perspectives on certain problems, thanks for the write up.
-pablo
The additional screencast is really helpful. The whole stuff is very impressive.
I guess the EDM designer shown in the video is part of an upcoming CTP.
But, really great stuff...
Peter
PS: I didn't had any problems understanding you (may be its because I am not a native english speaker or I was just listening more closely)
I have downloaded the ADO .NET vNext August 2006 CTP, and it's amazing! But what bothers me is the diagram you've showed in the video.
On the documents, it said that there's no EDM diagram and I have to edit it myself. This is okay, but I can't find the real definition of these models, especially when I look at the XML source generated, the msl, csdl, and ssdl files.
My points are, (maybe it's been discussed in the previous post):
Before I even read about Entity Framework, I was building a class diagram in Visual Studio 2005, that was modeling a specific problem I was having.
I wanted a very simple way to store configuration in multiple data stores, yet provide the flexibility that if one of my "Configuration" objects changed where it was stored(for example if SQL was down, and it needed to pull from a cached XML store.) (Don't ask me why, I was being a bit philosophical when doing this.) I came up with the conclusion that I needed some standard way to deal with data storage.
I had all sorts of fun components, everything from you probably guessed, "Mapping Interfaces" to data type conversation mapping to field name mapping, all sorts of wonderful, "What if something changes, how can I not have to recompile myapp.."
Then I found out about the Entity framework and I thought, yes, I bet Microsoft would eventually decide to go in this kind of direction. It really does simplify the development when your not dealing with specifics.
That rule there, dealing with something in a simpler more abstract way? So instead of dealing with bits, you deal with bytes, instead of dealing with Bytes you deal with data types, instead of dealing with data types by themselves, you can reference an object
type.....
Humm, something is going on here, I realized that mapping in general is a fundamental feature which can allow the left hand side of the problem to talk to the right hand side, without worrying about how the right side deals with communicating back. This is
wonderful for read operations, because it does not require any talk to the right on how it should deal with things.
However when it comes to modifying something on the right hand side, there needs to be tools for the left hand side, to understand the procedures for which the right side will perform operations, maintaining some expectation on the left hand side for consistency.
In other words, abstraction tells the left side, less and less about what is going on in the right side, vice versa, this is great for being secretive or being less complex, however it makes it harder and harder to guess what? Optimize the right side.
This is one of the reasons we look deep into things in real life, at a small scale, with tools that let us look past the abstractions, at some point, I don't know when specifically, you can no longer change the world when you cannot realign the structures which
make the abstraction possible.
However, I will admit that I would not want to have to deal with the specifics of atomic structure of an orange every time I wanted to eat one J
It looks interesting. There are some specific problems I'd like to see solved though. Most serious is below:
A big pain we have at the moment is keeping knowledge in as few places as possible in order to make maintenance easier and creation easier. Knowledge that most suffers are things like data types. Knowledge that this field is a date or a string limited to 32 upper case characters that cannot take blanks. Maybe even things such as more complex validation, a regular expression match, an email address.
At the moment that knowledge has to be coded into every form or field that the data appears in. It's easy for the programmer to forget - what's a missing property between people? - and if you change it it's easy to miss places where it's used. Also in Dot-Net-2 it seems hard to get basic support for this type information to go into things like DataGridView. I bind to a Date and I get a Text Box Editor that lets me enter non-date characters. The Cancel action in the Validating event is not user friendly and seems to give no chance for good feedback - or I'm getting it wrong.
An entity model seems like a wonderful thing to get this knowledge coded in the one place where it is really known - the conceptual model of the system. If that model carries through the code then it should be possible that when you bind to it the knowledge is used. The form controls should automatically pick up types validation, and ideally there should be an easy to use mechanism for inserting more complec business validation into the model.
I know this gets into arguments we've seen in the modelling world of where the business logic belongs - intelligent model or intelligent middle tier. Some things though are so basic they should be there in the model. There are there in the model when it hits the database. It should be easy to carry this to the front end and the user.
- Richard
It's difficult to follow the recorded screen... a webcast or screencast would be much better
nice video guys!!!