Vidéo de démonstration du designer Entity Data Model
http://blogs.msdn.com/adonet/archive/2007/10/26/entity-data-model-designer-video.aspx
| Décembre 2009 | ||||||||||
| L | M | M | J | V | S | D | ||||
| 1 | 2 | 3 | 4 | 5 | 6 | |||||
| 7 | 8 | 9 | 10 | 11 | 12 | 13 | ||||
| 14 | 15 | 16 | 17 | 18 | 19 | 20 | ||||
| 21 | 22 | 23 | 24 | 25 | 26 | 27 | ||||
| 28 | 29 | 30 | 31 | |||||||
|
||||||||||
Vidéo de démonstration du designer Entity Data Model
http://blogs.msdn.com/adonet/archive/2007/10/26/entity-data-model-designer-video.aspx
Articles ADO.NET Entity Framework - Blog de Mike taulty
Mike Taulty vient de poster une série d'articles(22) sur ADO.NET Entity Framework
http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/category/1024.aspx
A ne pas manquer la vidéo qu'il a faite (environ 38 minutes)
http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2007/08/27/9604.aspx
Au niveau du code à première vue pas d’énormes différences avec Linq To SQL sauf quand même que l’entity model repose sur System.Data.Objects ett non pas sur System.Data.Linq .. ce qu’il m’a valu quelques surprises comme : certaines méthodes qui ne peuvent pas être utilisées dans les requêtes Linq (exemple : la méthode First())
|
La ou Linq To SQL définit un DataContext qui hérite
System.Data.Linq.DataContext
|
Linq To Entites définit un DBEntities qui hérite de
System.Data.Objects.ObjectContext
|
|
Linq To SQL contient une classe par table sur la base de données
Chaque classe a un attribut [global::System.Data.Linq.Table()]
- Implémente System.Data.Linq.INotifyPropertyChanging,
System.ComponentModel.INotifyPropertyChanged
|
Le model contient une classe par table sur la base de données
Chaque classe hérite de System.Data.Objects.DataClasses.Entity
Et d’un attribut qui donne les informations vers le fichier Xml pour retrouver le mapping
[System.Data.Objects.DataClasses.EntityTypeAttribute()]
- Implémente ReportPropertyChanging et
ReportPropertyChanged afin denotifier des changements
|
|
Chaque property a un attribute [global::System.Data.Linq.Column()]
|
Chaque property a des attributs dont [System.Data.Objects.DataClasses.NullableAttribute(true)]
Indiquant si les valeurs nll sont acceptées (par rapport à AllowDBNull)
|
|
ContactDBModel.ContactDBEntities oContactDBEntities;
|
|
ContactDBModel.ContactType oContactType;
oContactType = new ContactDBModel.ContactType();
oContactType.ContactTypeLibelle = "Test Model";
oContactDBEntities.AddObject(oContactType);
oContactDBEntities.SaveChanges();
|
|
var Query =
from c in oContactDBEntities.ContactType
select c;
List<ContactDBModel.ContactType> List = new List<ContactDBModel.ContactType>();
//foreach (ContactDBModel.ContactType oContactType in
Query)
//{
// List.AddRange(oContactType);
//}
// ou
List.AddRange(Query);
MessageBox.Show(List[0].EntityState.ToString());
|
|
[assembly: System.Data.Objects.DataClasses.EdmSchemaAttribute("ContactDBModel")]
// This file implements the ContactDBModel version 0.0.0.0 namespace.
// Original file name:
// Generation date: 10/05/2007 18:04:35
namespace ContactDBModel
{
///<summary>
/// There are no comments for ContactDBEntities in the schema.
///</summary>
public partial class ContactDBEntities : global::System.Data.Objects.ObjectContext
{
///<summary>
/// Initializes a new ContactDBEntities object using
the connection string found in the 'ContactDBEntities' section of the application configuration file.
///</summary>
public ContactDBEntities() :
base("name=ContactDBEntities", "ContactDBEntities")
{
}
///<summary>
/// Initialize a new ContactDBEntities
object.
///</summary>
public ContactDBEntities(string
connectionString) :
base(connectionString,
"ContactDBEntities")
{
}
///<summary>
/// Initialize a new ContactDBEntities
object.
///</summary>
public ContactDBEntities(global::System.Data.Common.DbConnection connection, global::System.Data.Metadata.Edm.MetadataWorkspace workspace) :
base(connection,
workspace)
{
}
///<summary>
/// There are no comments for
ContactDBEntities.Contact in the schema.
///</summary>
public global::System.Data.Objects.ObjectQuery<global::ContactDBModel.Contact> Contact
{
get
{
return base.CreateQuery<global::ContactDBModel.Contact>("Contact");
}
}
///<summary>
/// There are no comments for
ContactDBEntities.ContactType in the schema.
///</summary>
public global::System.Data.Objects.ObjectQuery<global::ContactDBModel.ContactType> ContactType
{
get
{
return base.CreateQuery<global::ContactDBModel.ContactType>("ContactType");
}
}
}
///<summary>
/// There are no comments for ContactDBModel.ContactType in the
schema.
///</summary>
///<KeyProperties>
/// ContactTypeID
///</KeyProperties>
[System.Data.Objects.DataClasses.EntityTypeAttribute(SchemaName="ContactDBModel", TypeName="ContactType")]
[System.Runtime.Serialization.DataContractAttribute()]
public partial class ContactType : global::System.Data.Objects.DataClasses.Entity
{
///<summary>
/// Initialize a new ContactType object.
///</summary>
public ContactType()
{
// Call DoFinalConstruction if this is the most-derived
type.
if ((((object)(this)).GetType() == typeof(global::ContactDBModel.ContactType)))
{
this.DoFinalConstruction();
}
}
///<summary>
/// Initialize a new ContactType object.
///</summary>
///<param
name="contactTypeID">Initial value of ContactTypeID.</param>
public ContactType(int contactTypeID)
{
this.ContactTypeID = contactTypeID;
// Call DoFinalConstruction if this is the most-derived
type.
if ((((object)(this)).GetType() == typeof(global::ContactDBModel.ContactType)))
{
this.DoFinalConstruction();
}
}
///<summary>
/// There are no comments for Field ContactTypeID in
the schema.
///</summary>
[System.Data.Objects.DataClasses.EntityKeyPropertyAttribute()]
[System.Runtime.Serialization.DataMemberAttribute()]
[System.Data.Objects.DataClasses.NullableAttribute(false)]
public int ContactTypeID
{
get
{
return this._ContactTypeID;
}
set
{
this.ReportPropertyChanging("ContactTypeID", this._ContactTypeID);
this._ContactTypeID =
global::System.Data.Objects.DataClasses.StructuralObject.SetValidValue(value);
this.ReportPropertyChanged("ContactTypeID", this._ContactTypeID);
}
}
private int _ContactTypeID;
///<summary>
/// There are no comments for Field ContactTypeLib in
the schema.
///</summary>
[System.Data.Objects.DataClasses.EdmScalarPropertyAttribute()]
[System.Runtime.Serialization.DataMemberAttribute()]
[System.Data.Objects.DataClasses.NullableAttribute(true)]
public string ContactTypeLib
{
get
{
return this._ContactTypeLib;
}
set
{
this.ReportPropertyChanging("ContactTypeLib", this._ContactTypeLib);
this._ContactTypeLib = global::System.Data.Objects.DataClasses.StructuralObject.SetValidValue(value, true, 8000, false);
this.ReportPropertyChanged("ContactTypeLib", this._ContactTypeLib);
}
}
private string _ContactTypeLib;
}
}
|
|
<?xmlversion="1.0"encoding="utf-8"?>
<SchemaNamespace="ContactDBModel"Alias="Self"xmlns="http://schemas.microsoft.com/ado/2006/04/edm">
<EntityContainerName="ContactDBEntities">
<EntitySetName="Contact"EntityType="ContactDBModel.Contact" />
<EntitySetName="ContactType"EntityType="ContactDBModel.ContactType" />
</EntityContainer>
<EntityTypeName="Contact"Key="ContactID">
<PropertyName="ContactID"Type="Int32"Nullable="false" />
<PropertyName="ContactName"Type="String"Nullable="false"MaxLength="8000"Unicode="false"FixedLength="true" />
<PropertyName="ContactFirstName"Type="String"Nullable="false"MaxLength="8000"Unicode="false"FixedLength="true" />
<PropertyName="ContactEmail"Type="String"MaxLength="8000"Unicode="false"FixedLength="true" />
<PropertyName="ContactTypeID"Type="Int32"Nullable="false" />
<PropertyName="ContactAge"Type="Int32" />
</EntityType>
<EntityTypeName="ContactType"Key="ContactTypeID">
<PropertyName="ContactTypeID"Type="Int32"Nullable="false" />
<PropertyName="ContactTypeLib"Type="String"MaxLength="8000"Unicode="false"FixedLength="true"
/>
</EntityType>
</Schema>
|
|
<?xmlversion="1.0"encoding="utf-8"?>
<Mappingxmlns:cs="urn:schemas-microsoft-com:windows:storage:mapping:CS"cs:Space="C-S"xmlns="urn:schemas-microsoft-com:windows:storage:mapping:CS">
<cs:EntityContainerMappingcs:StorageEntityContainer="dbo"cs:CdmEntityContainer="ContactDBEntities">
<cs:EntitySetMappingcs:Name="Contact"cs:TableName="Contact"cs:TypeName="ContactDBModel.Contact">
<cs:ScalarPropertycs:Name="ContactID"cs:ColumnName="ContactID" />
<cs:ScalarPropertycs:Name="ContactName"cs:ColumnName="ContactName" />
<cs:ScalarPropertycs:Name="ContactFirstName"cs:ColumnName="ContactFirstName" />
<cs:ScalarPropertycs:Name="ContactEmail"cs:ColumnName="ContactEmail" />
<cs:ScalarPropertycs:Name="ContactTypeID"cs:ColumnName="ContactTypeID" />
<cs:ScalarPropertycs:Name="ContactAge"cs:ColumnName="ContactAge" />
</cs:EntitySetMapping>
<cs:EntitySetMappingcs:Name="ContactType"cs:TableName="ContactType"cs:TypeName="ContactDBModel.ContactType">
<cs:ScalarPropertycs:Name="ContactTypeID"cs:ColumnName="ContactTypeID" />
<cs:ScalarPropertycs:Name="ContactTypeLib"cs:ColumnName="ContactTypeLibelle" />
</cs:EntitySetMapping>
</cs:EntityContainerMapping>
</Mapping>
|
|
<?xmlversion="1.0"encoding="utf-8"?>
<SchemaNamespace="ContactDB"Alias="Self"xmlns="http://schemas.microsoft.com/ado/2006/04/edm/ssdl">
<EntityContainerName="dbo">
<EntitySetName="Contact"EntityType="ContactDB.Contact" />
<EntitySetName="ContactType"EntityType="ContactDB.ContactType" />
</EntityContainer>
<EntityTypeName="Contact"Key="ContactID">
<PropertyName="ContactID"Type="int"Nullable="false"StoreGeneratedPattern="identity" />
<PropertyName="ContactName"Type="char"Nullable="false" />
<PropertyName="ContactFirstName"Type="char"Nullable="false" />
<PropertyName="ContactEmail"Type="char" />
<PropertyName="ContactTypeID"Type="int"Nullable="false" />
<PropertyName="ContactAge"Type="int"
|