Entity Framework 4でプロパティがサポートされていないことに出くわしたのでenum
、回避策を説明する次の記事を見つけました。
OrderStatusWrapper
デザイナではなくコードで (記事で説明されているように)へのデータベース列のマッピングを表現するにはどうすればよいですか?
アップデート:
提供された回答に基づいて、OrderStatus
列挙OrderStatusWrapper
型を型に置き換える必要があることに気づきませんでした。
それ以外の:
public class Order
{
public OrderStatus Status { get; set; }
}
私は使用する必要があります:
public class Order
{
public OrderStatusWrapper Status { get; set; }
}
ただし、次のコードを実行すると、次のようになります。
// OrderContext class defined elsewhere as:
// public class OrderContext : DbContext
// {
// public DbSet<Order> Orders { get; set; }
// }
using(OrderContext ctx = new OrderContext())
{
Order order = new Order { Status = OrderStatus.Created; }
ctx.Orders.Add(order);
ctx.SaveChanges();
}
次の例外が発生します (簡潔にするためにトリミングされています)。
System.Data.SqlClient.SqlException Message=列名「値」が無効です。
データベース列の名前はStatus
です。Status
プロパティを次のように装飾してみました:
[Column("Status")]
それから
[Column("Status"), TypeName("OrderStatus")]
と
[Column("Status"), TypeName("OrderStatusWrapper")]
しかし、これはこの例外を解決しません。
Column
また、属性を削除してこれを実行しようとしました:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Order>()
.Property(p => p.OrderStatus)
.HasColumnName("OrderStatus");
}
しかし、次のコンパイル エラーが発生します。
エラー 1 型 'ConsoleApplication1.OrderStatusWrapper' は、ジェネリック型またはメソッド 'System.Data.Entity.ModelConfiguration.Configuration.Types.StructuralTypeConfiguration.Property( System.Linq.Expressions.Expression>)' [切り取ったパス]