現在、私はエンティティからのデータをsqlite DBに格納する必要があるため、顧客プロジェクトを進めています。私はEF6で作業しています。私は「コードファースト」アプローチを選択しました。Sqlite DBにSystem.Drawing.PointFを格納する最初のアプローチ
問題点:Boo
の単一の点として、そしてLoo
に点のリストとしての地理座標をSystem.Drawing.PointF
としてDBに保存したいとします。それは基本的なタイプではないので、残念ながら私が教えたように働いていません。
質問エンティティの定義および/またはモデルの構成で、単一ポイントof Boo
とポイントリストof Loo
をDBに保存するにはどうすればよいですか?前もって感謝します!
私のエンティティクラス:
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; }
}
私のモデル構成:
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);
}
}
マイ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);
}
}
マイDbInitializer:
class DbInitializer :
SqliteDropCreateDatabaseWhenModelChanges<DbContext>
{
public GDbInitializer(DbModelBuilder modelBuilder)
: base(modelBuilder, typeof(CustomHistory))
{ }
}
私はあなたがこれまで一緒に良い方法だと思います。 (ただし、 'system.drawing.pointf'はおそらく地理的データには適していないと付け加えるかもしれませんが、EF5以降ではこの種のサポートがあります; https://msdn.microsoft.com/en-US/データ/ hh859721 –