Windows Phone数据库中的多对多关系
本文关键字:关系 Phone 数据库 Windows | 更新日期: 2023-09-27 18:30:52
我一直在网上翻找,但没有找到任何解决方案来加快在WindowsPhone模拟器上创建数据库的速度。我的问题是:有没有办法加快遵循多对多的关系?为了创建数据库,我必须为每个Word
添加一个SimilarCollection
列表,并且必须在每个WordJunctionSimilar
中添加一些应该存储对某个 Word 的引用的。这令人沮丧,而且非常复杂。有没有更好的解决方案?
(只有SimilarCollection
和WordJunctionSimilar
代码很重要)
[Table]
public class Word
{
[Table]
public class SimilarCollection
{
[Column(IsPrimaryKey = true)]
public int SimilarId { get; set; }
[Column]
public string Translation { get; set; }
[Column]
public int? WordId { get; set; }
private EntitySet<WordJunctionSimilar> junction;
[Association(Name = "FK_Similar_Words1", Storage = "junction", ThisKey = "SimilarId", OtherKey = "SimilarId")]
public EntitySet<WordJunctionSimilar> Junction
{
get { return junction; }
set { junction = value; }
}
public SimilarCollection()
{
Junction = new EntitySet<WordJunctionSimilar>((w) => w.SimilarId = this.SimilarId,(w) => w.SimilarId = 0);
}
}
[Column(IsPrimaryKey = true)]
public int WordId { get; set; }
[Column(CanBeNull = false)]
public string Foreign { get; set; }
[Column]
public string Conjugation { get; set; }
[Column]
public string SpeechPart { get; set; }
[Column]
public string Type { get; set; }
private EntitySet<SimilarCollection> similar;
[Association(Name = "FK_Words_Similar", ThisKey = "WordId", OtherKey = "WordId", Storage = "similar")]
public EntitySet<SimilarCollection> Similar
{
get { return similar; }
set { similar = value; }
}
public Word()
{
Conjugation = "";
SpeechPart = "";
Type = "";
Similar = new EntitySet<SimilarCollection>(OnSimilarAdded,OnSimilarRemoved);
}
private void OnSimilarAdded(SimilarCollection similar)
{
similar.WordId = this.WordId;
}
private void OnSimilarRemoved(SimilarCollection similar)
{
similar.WordId = null;
}
}
[Table]
public class WordJunctionSimilar
{
[Column(IsPrimaryKey=true)]
public int WordId;
[Column(IsPrimaryKey=true)]
public int SimilarId;
private EntityRef<Word> wordRef;
[Association(Name="FK_Similar_Words0", Storage="wordRef",ThisKey="WordId",OtherKey="WordId")]
public Word WordRef
{
get { return wordRef.Entity; }
set { wordRef.Entity = value; WordId = value.WordId; }
}
public WordJunctionSimilar()
{
wordRef = new EntityRef<Word>();
}
}
加快数据库创建速度的最佳方法 - 不要创建数据库。而是分发完整的 .SDF 文件:在您的 XAP 中,和/或可从网络下载的 GZip 存档中。
通常,与模拟器相比,WP7硬件设备的运行速度要慢得多。如果您的数据库在模拟器上很慢,则在物理设备上可能完全无法使用。
我想补充一点,关系数据库(如SQLCE)不是灵丹妙药:有时,其他数据结构的性能可能更高,甚至几个数量级。这适用于内存数据和存储格式。