2012-09-02 45 views
0

我生成了一个新的迁移,但由于某种原因,它会删除我使用的所有枚举,并且不会在数据库模式中为其添加任何支持。虽然在代码优先EF 5.0迁移删除枚举

的定义,这些都是我的枚举:

using System; 
namespace StockManagement.Enums 
{ 
    public enum InventoryMethod 
    { 
     FIFO = 0, 
     LIFO = 1, 
     WEIGHTED_AVERAGE = 2 
    } 

    public enum TransactionDirection 
    { 
     BUY = 0, 
     SELL = 1 
    } 
} 

这是我的2相关的类:

public class User 
{ 
    [Key] 
    public int UserID { get; set; } 
    public string UserName { get; set; } 
    public string Email { get; set; } 
    public string Password { get; set; } 
    /// <summary> 
    /// FIFO = First In First Out 
    /// LIFO = Last In First Out 
    /// AVG = Average 
    /// </summary> 
    public InventoryMethod InventoryMethod { get; set; } 
    public virtual ICollection<Article> Articles { get; set; } 
} 

public class ArticleTransaction 
{ 
    [Key] 
    public int ArticleTransactionID { get; set; } 
    public DateTime TransactionDate { get; set; } 
    /// <summary> 
    /// Buy = Buying goods from suppliers 
    /// Sell = Selling goods to customers 
    /// </summary> 
    public TransactionDirection BuyOrSell { get; set; } 
    public int Number { get; set; } 
    public double PriceExclusive { get; set; } 
    public virtual Article Article { get; set; } 
} 

这是我产生迁移:

using System.ComponentModel.DataAnnotations; 
using System; 
using StockManagement.Enums; 
public class ArticleTransaction 
{ 
    [Key] 
    public int ArticleTransactionID { get; set; } 


    public DateTime TransactionDate { get; set; } 
    /// <summary> 
    /// Buy = Buying goods from suppliers 
    /// Sell = Selling goods to customers 
    /// </summary> 
    public TransactionDirection BuyOrSell { get; set; } 
    public int Number { get; set; } 
    public double PriceExclusive { get; set; } 

    public virtual Article Article { get; set; } 

} 

我有EF 5.0,这最近没有变化:) 任何人都有一个想法,为什么th是突然发生,如何解决这个问题?

+0

您生成的迁移是怎样的?你使用的是什么版本的.NET? –

+0

等一下,EF5做/做到了吗?我以为我读过的地方是,对枚举的数据库级支持不是内置的,它只处理数字字段作为它们的后备存储。 –

回答

1

大多数数据库没有枚举的概念。这反映在EF中,枚举属性由相应枚举类型的基础类型列支持。例如,因为InventoryMethod类型的基础枚举类型是System.Int32/int(如果未指定特定的基础类型,则这是默认的基础类型)此类型的所有属性都将由int类型的列支持(int在C#映射中EDM中的Edm.Int32,然后映射到数据库中的int(我在这里谈论的是Sql Server))。

+0

该死,你说得对。它支持VS 2012和.Net 4.5,而不是4.0 :( – NicoJuicy

+0

是的,EF6(https://github.com/moozzyk/VintageStudio/commit/2c6d53f835de31ff73f2b4d204aa00870b910a24)应该为.NET Fx 4世界带来枚举。 – Pawel