WP7 SQL EntitySet EntityRef - Löschen eines Objects WP7 SQL EntitySet EntityRef - Löschen eines Objects
Danke Danke:  0
Ergebnis 1 bis 6 von 6
  1. hallo zusammen,

    erst mal die quelle worauf mein projekt aufbaut:
    How to: Create a Local Database Application with MVVM for Windows Phone

    es handelt sich um ein windows phone mango projekt, in diesem wollte ich jetzt das erste mal die daten mit der sql datenbank verwalten.

    in meinem projekt existieren insesamt drei tabellen: projekte, verbindungen, datenpunkte

    ein projekt besitzt daher zwei EntitySets, also für die verbindungen und für die datenpunkte.
    eine verbindung besitzt ein EntitySet, also für die datenpunkte und eine EntityRef für das projekt.
    ein datenpunkt besitzt zwei EntityRefs, also für das projekt und für die verbindung.

    hört sich doch schon mal alles ganz gut an und außerdem kann ich auch schon objekte (projekte, verbindungen, datenpunkte) einfügen, bearbeiten, löschen - klappt alles so weit wie "geplant"

    ABER: jetzt ist mir aufgefallen das beim löschen eines datenpunktes die dazugehörige verbindung ebenfalls gelöscht wird?! wie kann das? muss das so? habe ich da etwas überlesen oder einfach nur vertippt - komme an dieser stelle nicht weiter!

    was mir dann aber doch noch aufgefallen ist: wenn ich das programm neu starte ist dann der datenpunkt wie gewollt nicht mehr da. und die verbindung ist wieder da, welche ja hätte nicht weg sein sollen.

    bin natürlich gerne dazu bereit quellen aus dem programm zu posten und wenn es sein muss auch das projekt per e-mail zu senden. gucke das programm seit zwei tagen durch aber komme einfach nicht auf die lösung/problem!
    0
     

  2. 22.10.2011, 15:45
    #2
    Wie sieht denn dein Datenbankschema aus?

    Projekt
    ______
    ProjektId pk
    Name
    ...

    Verbindung
    _________
    ProjektId pk, fk
    VerbindungsId pk
    ...

    Datenpunkt
    __________
    ProjektId pk, fk
    DatenpunktId pk
    ...

    pk steht da für Primary Key, fk für Foreign Key (nur der Vollständigkeit halber). Oder gibt es zwischen den Datenpunkten und den Verbindungen auch eine Referenz?

    Wie hast du das Entity-Modell in VisualStudio erstellt? Hast du da das ganze aufgemalt und lässt dann die Datenbank erstellen? Ich hab mit dem Entity Framework bisher nur am Desktop gearbeitet und dort meistens das Entity-Modell aus der Datenbank erstellen lassen.

    PS: Seh gerade, der Artikel verwendet LINQ2SQL - grad keine Ahnung obs auch das Entity Framework gibt. Sollte aber vom Designer her recht ähnlich sein.
    0
     

  3. hallo,

    ohne designer, wird im wp7 sdk nicht unterstützt. daher bin ich jetzt mal so frech und poste hier neben dem DataContext auch die drei Tabellen und das ViewModel von dem Datapoint ...hoffe nur das es hier verständlich zu lesen ist! ..ViewModel von Project, Interface, Datapoint sehen sooo ziemlich gleich aus - und zu guter letzt auch die ein paar zeilen aus dem Konsruktor in App.xaml.cs wo ein paar daten als beispiel angelegt werden


    PHP-Code:
        public class StormDataContext DataContext
        
    {
            public static 
    string ConnectionString "Data Source=isostore:/dbstorm.sdf";

            public 
    StormDataContext(string connectionString)
                : 
    base(connectionString)
            {
            }

            public 
    Table<StormProjectModelStormProjectItems;
            public 
    Table<StormInterfaceModelStormInterfaceItems;
            public 
    Table<StormDatapointModelStormDatapointItems;
        } 
    PHP-Code:
        [Table]
        public class 
    StormProjectModel INotifyPropertyChangedINotifyPropertyChanging
        
    {
            
    /// <summary>
            /// Version column aids update performance
            /// </summary>
            
    [Column(IsVersion true)]
            private 
    Binary _version;


            
    #region Id: private field, public property, and database column.

            
    private int _Id;

            [
    Column(IsPrimaryKey trueIsDbGenerated trueDbType "INT NOT NULL Identity"CanBeNull falseAutoSync AutoSync.OnInsert)]
            public 
    int Id
            
    {
                
    get { return _Id; }
                
    set
                
    {
                    if (
    _Id != value)
                    {
                        
    NotifyPropertyChanging("Id");
                        
    _Id value;
                        
    NotifyPropertyChanged("Id");
                    }
                }
            }

            
    #endregion

            #region Name: private field, public property, and database column.

            
    private String _Name;

            [
    Column]
            public 
    String Name
            
    {
                
    get { return _Name; }
                
    set
                
    {
                    if (
    _Name != value)
                    {
                        
    NotifyPropertyChanging("Name");
                        
    _Name value;
                        
    NotifyPropertyChanged("Name");
                    }
                }
            }

            
    #endregion


            
    public StormProjectModel()
            {
                
    _Interfaces = new EntitySet<StormInterfaceModel>
                    (
                        new 
    Action<StormInterfaceModel>(this.AttachInterface),
                        new 
    Action<StormInterfaceModel>(this.DetachInterface)
                    );

                
    _Datapoints = new EntitySet<StormDatapointModel>
                    (
                        new 
    Action<StormDatapointModel>(this.AttachDatapoint),
                        new 
    Action<StormDatapointModel>(this.DetachDatapoint)
                    );
            }

            public 
    StormProjectModel(String name)
                : 
    this()
            {
                
    Name name;
            }


            
    #region EntitySet<StormInterfaceModel> _Interfaces;

            
    private EntitySet<StormInterfaceModel_Interfaces;

            [
    Association(Storage "_Interfaces"OtherKey "_ProjectId"ThisKey "Id")]
            public 
    EntitySet<StormInterfaceModelInterfaces
            
    {
                
    get
                
    {
                    return 
    _Interfaces;
                }
                
    set
                
    {
                    
    _Interfaces.Assign(value);
                }
            }

            private 
    void AttachInterface(StormInterfaceModel stormInterfaceModel)
            {
                
    NotifyPropertyChanging("StormInterfaceModel");
                
    stormInterfaceModel.Project this;
            }

            private 
    void DetachInterface(StormInterfaceModel stormInterfaceModel)
            {
                
    NotifyPropertyChanging("StormInterfaceModel");
                
    stormInterfaceModel.Project null;
            }

            
    #endregion

            #region  EntitySet<StormDatapointModel> _Datapoints;

            
    private EntitySet<StormDatapointModel_Datapoints;

            [
    Association(Storage "_Datapoints"OtherKey "_ProjectId"ThisKey "Id")]
            public 
    EntitySet<StormDatapointModelDatapoints
            
    {
                
    get
                
    {
                    return 
    _Datapoints;
                }
                
    set
                
    {
                    
    _Datapoints.Assign(value);
                }
            }

            private 
    void AttachDatapoint(StormDatapointModel stormDatapointModel)
            {
                
    NotifyPropertyChanging("StormDatapointModel");
                
    stormDatapointModel.Project this;
            }

            private 
    void DetachDatapoint(StormDatapointModel stormDatapointModel)
            {
                
    NotifyPropertyChanging("StormDatapointModel");
                
    stormDatapointModel.Project null;
            }

            
    #endregion


            #region INotifyPropertyChanged Members

            
    public event PropertyChangedEventHandler PropertyChanged;

            
    // Used to notify that a property changed
            
    private void NotifyPropertyChanged(String propertyName)
            {
                if (
    PropertyChanged != null)
                {
                    
    PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
                }
            }

            
    #endregion

            #region INotifyPropertyChanging Members

            
    public event PropertyChangingEventHandler PropertyChanging;

            
    // Used to notify that a property is about to change
            
    private void NotifyPropertyChanging(String propertyName)
            {
                if (
    PropertyChanging != null)
                {
                    
    PropertyChanging(this, new PropertyChangingEventArgs(propertyName));
                }
            }

            
    #endregion
        

    PHP-Code:
        [Table]
        public class 
    StormInterfaceModel INotifyPropertyChangedINotifyPropertyChanging
        
    {
            
    /// <summary>
            /// Version column aids update performance
            /// </summary>
            
    [Column(IsVersion true)]
            private 
    Binary _version;


            
    #region Id: private field, public property, and database column

            
    private int _Id;

            [
    Column(IsPrimaryKey trueIsDbGenerated trueDbType "INT NOT NULL Identity"CanBeNull falseAutoSync AutoSync.OnInsert)]
            public 
    int Id
            
    {
                
    get
                
    {
                    return 
    _Id;
                }
                
    set
                
    {
                    if (
    _Id != value)
                    {
                        
    NotifyPropertyChanging("Id");
                        
    _Id value;
                        
    NotifyPropertyChanged("Id");
                    }
                }
            }

            
    #endregion

            #region Name: private field, public property, and database column

            
    private String _Name;

            [
    Column]
            public 
    String Name
            
    {
                
    get
                
    {
                    return 
    _Name;
                }
                
    set
                
    {
                    if (
    _Name != value)
                    {
                        
    NotifyPropertyChanging("Name");
                        
    _Name value;
                        
    NotifyPropertyChanged("Name");
                    }
                }
            }

            
    #endregion


            
    public StormInterfaceModel()
            {
                
    _Datapoints = new EntitySet<StormDatapointModel>
                    (
                        new 
    Action<StormDatapointModel>(this.AttachDatapoint),
                        new 
    Action<StormDatapointModel>(this.DetachDatapoint)
                    );
            }


            
    #region EntityRef<StormProjectModel> _Project;

            
    private EntityRef<StormProjectModel_Project;

            [
    Column]
            
    internal int _ProjectId;

            [
    Association(Storage "_Project"ThisKey "_ProjectId"OtherKey "Id"IsForeignKey true)]
            public 
    StormProjectModel Project
            
    {
                
    get
                
    {
                    return 
    _Project.Entity;
                }
                
    set
                
    {
                    
    NotifyPropertyChanging("Project");
                    
    _Project.Entity value;

                    if (
    value != null)
                    {
                        
    _ProjectId value.Id;
                    }

                    
    NotifyPropertyChanging("Project");
                }
            }

            
    #endregion

            #region  EntitySet<StormDatapointModel> _Datapoints;

            
    private EntitySet<StormDatapointModel_Datapoints;

            [
    Association(Storage "_Datapoints"OtherKey "_InterfaceId"ThisKey "Id")]
            public 
    EntitySet<StormDatapointModelDatapoints
            
    {
                
    get
                
    {
                    return 
    _Datapoints;
                }
                
    set
                
    {
                    
    _Datapoints.Assign(value);
                }
            }

            private 
    void AttachDatapoint(StormDatapointModel stormDatapointModel)
            {
                
    NotifyPropertyChanging("StormDatapointModel");
                
    stormDatapointModel.Interface = this;
            }

            private 
    void DetachDatapoint(StormDatapointModel stormDatapointModel)
            {
                
    NotifyPropertyChanging("StormDatapointModel");
                
    stormDatapointModel.Interface = null;
            }

            
    #endregion


            #region INotifyPropertyChanged Members

            
    public event PropertyChangedEventHandler PropertyChanged;

            
    // Used to notify that a property changed
            
    private void NotifyPropertyChanged(String propertyName)
            {
                if (
    PropertyChanged != null)
                {
                    
    PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
                }
            }

            
    #endregion

            #region INotifyPropertyChanging Members

            
    public event PropertyChangingEventHandler PropertyChanging;

            
    // Used to notify that a property is about to change
            
    private void NotifyPropertyChanging(String propertyName)
            {
                if (
    PropertyChanging != null)
                {
                    
    PropertyChanging(this, new PropertyChangingEventArgs(propertyName));
                }
            }

            
    #endregion
        

    PHP-Code:
        [Table]
        public class 
    StormDatapointModel INotifyPropertyChangedINotifyPropertyChanging
        
    {
            
    /// <summary>
            /// Version column aids update performance
            /// </summary>
            
    [Column(IsVersion true)]
            private 
    Binary _version;


            
    #region Id: private field, public property, and database column

            
    private int _Id;

            [
    Column(IsPrimaryKey trueIsDbGenerated trueDbType "INT NOT NULL Identity"CanBeNull falseAutoSync AutoSync.OnInsert)]
            public 
    int Id
            
    {
                
    get
                
    {
                    return 
    _Id;
                }
                
    set
                
    {
                    if (
    _Id != value)
                    {
                        
    NotifyPropertyChanging("Id");
                        
    _Id value;
                        
    NotifyPropertyChanged("Id");
                    }
                }
            }

            
    #endregion

            #region Name: private field, public property, and database column.

            
    private String _Name;

            [
    Column]
            public 
    String Name
            
    {
                
    get
                
    {
                    return 
    _Name;
                }
                
    set
                
    {
                    if (
    _Name != value)
                    {
                        
    NotifyPropertyChanging("Name");
                        
    _Name value;
                        
    NotifyPropertyChanged("Name");
                    }
                }
            }

            
    #endregion


            #region EntityRef<StormProjectModel> _Project;

            
    private EntityRef<StormProjectModel_Project;

            [
    Column]
            
    internal int _ProjectId;

            [
    Association(Storage "_Project"ThisKey "_ProjectId"OtherKey "Id"IsForeignKey true)]
            public 
    StormProjectModel Project
            
    {
                
    get
                
    {
                    return 
    _Project.Entity;
                }
                
    set
                
    {
                    
    NotifyPropertyChanging("Project");
                    
    _Project.Entity value;

                    if (
    value != null)
                    {
                        
    _ProjectId value.Id;
                    }

                    
    NotifyPropertyChanging("Project");
                }
            }

            
    #endregion

            #region EntityRef<StormInterfaceModel> _Interface;

            
    private EntityRef<StormInterfaceModel_Interface;

            [
    Column]
            
    internal int _InterfaceId;

            [
    Association(Storage "_Interface"ThisKey "_InterfaceId"OtherKey "Id"IsForeignKey true)]
            public 
    StormInterfaceModel Interface
            {
                
    get
                
    {
                    return 
    _Interface.Entity;
                }
                
    set
                
    {
                    
    NotifyPropertyChanging("Interface");
                    
    _Interface.Entity value;

                    if (
    value != null)
                    {
                        
    _InterfaceId value.Id;
                    }

                    
    NotifyPropertyChanging("Interface");
                }
            }

            
    #endregion


            #region INotifyPropertyChanged Members

            
    public event PropertyChangedEventHandler PropertyChanged;

            
    // Used to notify that a property changed
            
    protected void NotifyPropertyChanged(String propertyName)
            {
                if (
    PropertyChanged != null)
                {
                    
    PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
                }
            }

            
    #endregion

            #region INotifyPropertyChanging Members

            
    public event PropertyChangingEventHandler PropertyChanging;

            
    // Used to notify that a property is about to change
            
    protected void NotifyPropertyChanging(String propertyName)
            {
                if (
    PropertyChanging != null)
                {
                    
    PropertyChanging(this, new PropertyChangingEventArgs(propertyName));
                }
            }

            
    #endregion
        

    PHP-Code:
        public class StormDatapointView INotifyPropertyChanged
        
    {
            private 
    StormDataContext _StormDb;

            private 
    ObservableCollection<StormDatapointModel_Items;
            public 
    ObservableCollection<StormDatapointModelItems
            
    {
                
    get
                
    {
                    return 
    _Items;
                }
                
    set
                
    {
                    if (
    _Items != value)
                    {
                        
    _Items value;
                        
    NotifyPropertyChanged("Items");
                    }
                }
            }


            public 
    StormDatapointView(StormDataContext stormDataContext)
            {
                
    _StormDb stormDataContext;

                var 
    itemsInDb from StormDatapointModel items in _StormDb.StormDatapointItems select items;

                
    Items = new ObservableCollection<StormDatapointModel>(itemsInDb);
            }

            public 
    void SubmitChanges()
            {
                
    _StormDb.SubmitChanges();
            }

            public 
    void AddItem(StormDatapointModel stormDatapointModel)
            {
                
    _StormDb.StormDatapointItems.InsertOnSubmit(stormDatapointModel);
                
    _StormDb.SubmitChanges();

                
    Items.Add(stormDatapointModel);
            }

            public 
    void DeleteItem(StormDatapointModel stormDatapointModel)
            {
                
    _StormDb.StormDatapointItems.DeleteOnSubmit(stormDatapointModel);
                
    _StormDb.SubmitChanges();

                
    Items.Remove(stormDatapointModel);
            }


            
    #region INotifyPropertyChanged Members

            
    public event PropertyChangedEventHandler PropertyChanged;

            
    // Used to notify Silverlight that a property has changed.
            
    private void NotifyPropertyChanged(string propertyName)
            {
                if (
    PropertyChanged != null)
                {
                    
    PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
                }
            }

            
    #endregion
        

    PHP-Code:
                #region StormDataContext stormdb = new StormDataContext(StormDataContext.ConnectionString);

                
    StormDataContext stormdb = new StormDataContext(StormDataContext.ConnectionString);

                if (
    stormdb.DatabaseExists() == false)
                {
                    
    stormdb.CreateDatabase();

                    
    StormProjectModel stormProjectModel1 = new StormProjectModel();
                    
    stormProjectModel1.Name "P1";
                    
    stormdb.StormProjectItems.InsertOnSubmit(stormProjectModel1);

                    
    StormInterfaceModel stormInterfaceModel1 = new StormInterfaceModel();
                    
    stormInterfaceModel1.Name "IF1";
                    
    stormInterfaceModel1.Project stormProjectModel1;
                    
    stormdb.StormInterfaceItems.InsertOnSubmit(stormInterfaceModel1);

                    
    StormDatapointModel stormDatapointModel1 = new StormDatapointModel();
                    
    stormDatapointModel1.Name "D1";
                    
    stormDatapointModel1.Project stormProjectModel1;
                    
    stormDatapointModel1.Interface = stormInterfaceModel1;
                    
    stormdb.StormDatapointItems.InsertOnSubmit(stormDatapointModel1);

                    
    stormdb.SubmitChanges();
                }

                
    _ViewModelProjects = new StormProjectView(stormdb);
                
    _ViewModelInterfaces = new StormInterfaceView(stormdb);
                
    _ViewModelDatapoints = new StormDatapointView(stormdb);

                
    #endregion 
    0
     

  4. vor lauter frust habe ich jetzt mal angefangen jetzt ein bisschen zu testen / probieren und bin dabei auf folgendes gestoßen - in der klasse DatapointModel:

    vorher
    PHP-Code:
    [Association(Storage "_Interface"ThisKey "_InterfaceId"OtherKey "Id"IsForeignKey true)] 
    nachher:
    PHP-Code:
    [Association(Storage "_Interface"ThisKey "_InterfaceId"OtherKey "Id")] 
    wenn ich also das "[FONT=Courier New]IsForeignKey = true[/FONT]" entferne scheint er mir beim löschen eines datenpunktes die verbindung jetzt nicht mehr zu löschen. ich verstehe aber nicht warum es nur bei den datenpunkten / verbindungen passiert?!

    beschreibung in der msdn: http://msdn.microsoft.com/de-de/libr...oreignkey.aspx
    0
     

  5. frust: kommando zurück! wenn ich wie oben beschrieben "[FONT=Courier New]IsForeignKey = true[/FONT]" entferne dann nimmt dieser den default wert [FONT=Courier New]false[/FONT] an. das ruft jetzt leider ganz andere probleme mit sich. in diesem fall scheint die verbindung nicht mehr das gleiche objekt zu sein.

    denn wenn ich mehrere datenpunkte in der tabelle habe, welche alle auf die gleiche verbindung zeigen, und einen dieser datenpunkte - nach dem löschen eines datenpunktes - aufrufe. dann werden bei mir im programm an verschiedenen stellen exceptions geworfen mit der message: objekt existiert nicht!

    mein momentaner zwischenstand: liege mit einer menge frust bei null
    0
     

  6. sooo, es liegt wohl an dem IsForeignKey=true. bei mir musste dieser auf false gesetzt, bzw. erst gar nicht gesetzt werden. weil die klasse Datapoints zwei parants hat, hat dieser wohl nicht sooo gerne.

    habe es erst dann bemerkt als ich die die - welche ich im programm im konstruktor von app.xaml.cs - beispieldaten gelöscht haben und die daten im programm händisch eingegen habe... dann klappte alles so wie es sollte.

    werde erst mal noch eine nacht darüber schlafen und dann noch mal ausgiebig testen und erst dann weiter machen - vielen dank fürs zuhören meiner probleme
    0
     

Ähnliche Themen

  1. WP7 Exchange-Profil löschen?
    Von malex im Forum Windows Phone 7 Allgemein
    Antworten: 3
    Letzter Beitrag: 22.10.2011, 10:30
  2. paar fragen eines neulings zum wp7
    Von herrfischer im Forum Windows Phone 7 Allgemein
    Antworten: 9
    Letzter Beitrag: 07.09.2011, 09:07
  3. [ZUNE] Kann man ein "Backup" eines WP7-Phones zurückspielen...
    Von hubutz im Forum Windows Phone 7 Allgemein
    Antworten: 23
    Letzter Beitrag: 18.07.2011, 20:39
  4. SQL PHP Datenbank
    Von FAIR im Forum Programmieren
    Antworten: 0
    Letzter Beitrag: 06.02.2008, 11:12

Besucher haben diese Seite mit folgenden Suchbegriffen gefunden:

windows phone entityset

wp7 dbtype

wp7 sql

entityref wp7

windows phone 7 sql

window phone additem in viewmodel

entityset wp7

wp7 Binary _version; database

entityset value set automatically

windows phone entityset gets set automatically

windows phone entityset gets set

windows phone mango local database entityset

wp7 local database delete entity

windows phone 7 and sql

entityset entityref

entityref viewmodel phone

wp7 entityset remove

new entityset wp7

wp7 observablecollection aus table

wp7 db entityset

windows phone 7 create db entities

wp7 entityset remove item

php entityset klasse

wp7 EntityRef EntitySet

Stichworte