Je travaille actuellement sur un projet client où je dois stocker des données à partir des entités dans une base de données sqlite. Je travaille avec EF6 et j'ai choisi l'approche "code d'abord". Problème: Je voudrais stocker les coordonnées géographiques (comme point unique dans Boo
et comme une liste de points dans Loo
) comme System.Drawing.PointF
dans la base de données. Parce que ce n'est pas un type primitif, il ne fonctionne malheureusement pas comme je l'ai enseigné. Question: Que dois-je modifier dans ma définition d'entité et/ou dans ma configuration de modèle pour stocker le point unique Boo
et la liste de points de Loo
dans la base de données? Merci d'avance!Code première approche de stocker System.Drawing.PointF dans Sqlite DB
cours Mon entité:
public class Collection
{
[Key]
public int Id { get; set; }
public virtual List<Foo> Foos { get; set; }
}
public class Foo
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public virtual Collection FooCollection;
}
public class Boo : Foo
{
public PointF Location { get; set; }
}
public class Loo : Foo
{
public List<PointF> Line { get; set; }
}
Ma configuration du modèle:
public class ModelConfiguration
{
public static void Configure(DbModelBuilder modelBuilder)
{
ConfigureFooCollectionEntity(modelBuilder);
}
private static void ConfigureFooCollectionEntity(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Collection>().ToTable("base.MyTable")
.HasRequired(t => t.Foos)
.WithMany()
.WillCascadeOnDelete(false);
}
private static void ConfigureGridElementEntity(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Foo>()
.HasRequired(p => p.FooCollection)
.WithMany(fooCollection => fooCollection.Foos)
.WillCascadeOnDelete(true);
}
}
Mon DbContext:
public class DbContext : DbContext
{
public DbSet<Collection> DataCollection { get; set; }
public DbContext(string nameOrConnectionString)
: base(nameOrConnectionString)
{
Configure();
}
public DbContext(DbConnection connection, bool contextOwnsConnection)
: base(connection, contextOwnsConnection)
{
Configure();
}
private void Configure()
{
Configuration.ProxyCreationEnabled = true;
Configuration.LazyLoadingEnabled = true;
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
ModelConfiguration.Configure(modelBuilder);
var initializer = new DbInitializer(modelBuilder);
Database.SetInitializer(initializer);
}
}
Mon DbInitializer:
class DbInitializer :
SqliteDropCreateDatabaseWhenModelChanges<DbContext>
{
public GDbInitializer(DbModelBuilder modelBuilder)
: base(modelBuilder, typeof(CustomHistory))
{ }
}
Je pense que vous êtes une bonne façon le long jusqu'à présent. (bien que je pourrais ajouter que 'system.drawing.pointf' n'est peut-être pas le plus approprié pour les données géographiques.) EF5 et plus tard ont un certain soutien pour ce genre de chose cependant: https://msdn.microsoft.com/fr-fr/ data/hh859721 –