2011-05-15 5 views
0

Est-ce que quelqu'un a réussi à lier un DataNavigator et un DataGrid en utilisant la propriété DataSource et ADO.NET Entity Framework de sorte que l'ajout et la suppression (boutons + et - dans le navigateur de données). travail? J'ai le problème, que chaque fois que je clique sur le bouton d'ajout de DataNavigator, l'EntityState est toujours mis à détaché. Je ne peux pas comprendre, comment ajouter cette entité détachée au DataContext.Entity Framework et DataNavigator

mon code est simple (en utilisant une classe statique de session et une classe partielle):

internal class Session 
{ 
    private static Entities _entities; 

    public static Entities Entities 
    { 
     get { return _entities ?? (_entities = new Entities()); } 
     set { _entities = value; } 
    } 
} 

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
     InitData(); 
    } 

    private void InitData() 
    { 
     gridControl1.DataSource = Session.Entities.SomeObjects; 
     dataNavigator1.DataSource = Session.Entities.SomeObjects; 
    } 
} 

public partial class SomeObjects 
{ 
    public SomeObjects() 
    { 
     PropertyChanged += SomeObject_PropertyChanged; 
     ObjectId = Guid.NewGuid(); 
    } 

    private void SomeObject_PropertyChanged(object sender, PropertyChangedEventArgs e) 
    { 
      Debug.WriteLine(EntityState); // when i change a existing record in the grid, EntityState is set to modified and can be saved easily using SaveChanges. But when i add a new entity, EntityState is always set to detached. 
    } 
} 

Aide est apprécié!

-Christian

Répondre

2

Je pense que vous devriez utiliser BindingSource contrôle au lieu d'utiliser DataSource et gérer l'événement AddingNew State régler manuellement à Added en appelant AddObject. DataGrid ne sait rien de la source de données et ne peut donc pas communiquer avec le contexte/l'ensemble de structure d'entité et ajouter un objet. Vous devez le faire manuellement et pour cela vous avez besoin d'un événement à gérer lors de l'ajout d'un nouvel enregistrement. Je crois que AddingNew et BindingSource est le chemin à parcourir.