
Ergebnis 1 bis 6 von 6
-
Bin neu hier
- 22.10.2011, 15:31
- #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!
-
Gehöre zum Inventar
- 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.
-
Bin neu hier
- 22.10.2011, 16:31
- #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<StormProjectModel> StormProjectItems;
public Table<StormInterfaceModel> StormInterfaceItems;
public Table<StormDatapointModel> StormDatapointItems;
}
PHP-Code:[Table]
public class StormProjectModel : INotifyPropertyChanged, INotifyPropertyChanging
{
/// <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 = true, IsDbGenerated = true, DbType = "INT NOT NULL Identity", CanBeNull = false, AutoSync = 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<StormInterfaceModel> Interfaces
{
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<StormDatapointModel> Datapoints
{
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 : INotifyPropertyChanged, INotifyPropertyChanging
{
/// <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 = true, IsDbGenerated = true, DbType = "INT NOT NULL Identity", CanBeNull = false, AutoSync = 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<StormDatapointModel> Datapoints
{
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 : INotifyPropertyChanged, INotifyPropertyChanging
{
/// <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 = true, IsDbGenerated = true, DbType = "INT NOT NULL Identity", CanBeNull = false, AutoSync = 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<StormDatapointModel> Items
{
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
-
Bin neu hier
- 22.10.2011, 22:36
- #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)]
PHP-Code:[Association(Storage = "_Interface", ThisKey = "_InterfaceId", OtherKey = "Id")]
beschreibung in der msdn: http://msdn.microsoft.com/de-de/libr...oreignkey.aspx
-
Bin neu hier
- 22.10.2011, 23:23
- #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
-
Bin neu hier
- 23.10.2011, 16:48
- #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
Ähnliche Themen
-
WP7 Exchange-Profil löschen?
Von malex im Forum Windows Phone 7 AllgemeinAntworten: 3Letzter Beitrag: 22.10.2011, 10:30 -
paar fragen eines neulings zum wp7
Von herrfischer im Forum Windows Phone 7 AllgemeinAntworten: 9Letzter Beitrag: 07.09.2011, 09:07 -
[ZUNE] Kann man ein "Backup" eines WP7-Phones zurückspielen...
Von hubutz im Forum Windows Phone 7 AllgemeinAntworten: 23Letzter Beitrag: 18.07.2011, 20:39 -
SQL PHP Datenbank
Von FAIR im Forum ProgrammierenAntworten: 0Letzter Beitrag: 06.02.2008, 11:12
Pixel 10 Serie mit Problemen:...