实体框架Db First和Enum

时间:2017-01-03 03:45:47

标签: c# entity-framework enums

我有Microsoft的Northwind数据库与表订单:

CREATE TABLE "Orders" (
    "OrderID" "int" IDENTITY (1, 1) NOT NULL ,
    "CustomerID" nchar (5) NULL ,
    "EmployeeID" "int" NULL ,
    "OrderDate" "datetime" NULL ,
    "RequiredDate" "datetime" NULL ,
    "ShippedDate" "datetime" NULL ,
    "ShipVia" "int" NULL ,
    "Freight" "money" NULL CONSTRAINT "DF_Orders_Freight" DEFAULT (0),
    "ShipName" nvarchar (40) NULL ,
    "ShipAddress" nvarchar (60) NULL ,
    "ShipCity" nvarchar (15) NULL ,
    "ShipRegion" nvarchar (15) NULL ,
    "ShipPostalCode" nvarchar (10) NULL ,
    "ShipCountry" nvarchar (15) NULL ,
    CONSTRAINT "PK_Orders" PRIMARY KEY  CLUSTERED 
    (
        "OrderID"
    ),
    CONSTRAINT "FK_Orders_Customers" FOREIGN KEY 
    (
        "CustomerID"
    ) REFERENCES "dbo"."Customers" (
        "CustomerID"
    ),
    CONSTRAINT "FK_Orders_Employees" FOREIGN KEY 
    (
        "EmployeeID"
    ) REFERENCES "dbo"."Employees" (
        "EmployeeID"
    ),
    CONSTRAINT "FK_Orders_Shippers" FOREIGN KEY 
    (
        "ShipVia"
    ) REFERENCES "dbo"."Shippers" (
        "ShipperID"
    )
)

我想通过Entity Framework使用此数据库。为此,我为现有的db创建了edmx-model。现在我想添加枚举属性Status,它应该由DateTime.Now,OrderDate,RequiredDate等计算,但我不知道如何将此属性添加到Order类,而不更改Orders表。 我应该从Order类继承还是有更简洁的方法呢?

1 个答案:

答案 0 :(得分:0)

在Order类(具有相同名称)的相同名称空间下添加一个分部类,并在那里添加您的属性:

public partial class Order
{
     public SomeStatusEnum Status
     {
          get { //Put your code to figure out the enum here. }
     }
}

这是有效的,因为EF生成的类是部分的,正是出于这个原因。

这种方法可能遇到的一种常见情况是,如果您只是尝试添加类,则会出现错误。这是因为EDMX模型将在封面下创建一个具有相同名称的文件。如果遍历设计器添加的文件,则可以找到此文件。要解决这个问题,请创建一个文件夹(例如POCO)并将您的类放在那里,然后更改名称空间以匹配EDMX类的名称空间。