如何向实体框架实体添加非数据库属性?

时间:2011-06-21 19:47:49

标签: asp.net silverlight entity-framework ria wcf-ria-services

我的问题:我想在我的Entity Framework实体(在我的ASP.NET项目中)添加一个简单的类型属性(例如string,int,double),该实体与任何字段都没有关联在与实体对应的数据库表中。我希望能够在我的ASP.NET项目中设置此属性的值,并将该属性的内容自动神奇地发送到Silverlight客户端,通过RIA Services获取实体。

我该怎么做?

注意:如果这样更容易,对于我的特定实例,我不需要将实体保存回数据库。此外,如果这对于视图和表格都有用,那将会很棒。

我的设置:我正在使用Silverlight 4,Entity Framework 4和RIA Services。它以正常方式设置:Silverlight客户端应用程序和ASP.NET服务器应用程序;我正在从数据库生成我的EF模型。 RIA服务正在Silverlight客户端上生成实体和数据库访问方法。

我的例子:

数据库:客户表

  • 客户id
  • 客户名称

EF生成的实体(ASP.NET服务器端):客户类

  • 公共财产CustomerID as Integer
  • Public Property CustomerName as String

我想将一个属性添加到与数据库无关的Customer实体:

  • Public Property UnicornColor as string

在我的域服务(ASP.NET服务器端)中,我将自己填写新属性:

Public Function GetCustomers() As IQueryable(Of Customer)
    Dim customers as IQueryable(of Customer) = Me.ObjectContext.Customers
    For each c as Customer in customers
       c.UnicornColor = "Green"
    Next
    return customers
End Function

在客户端,当我运行查询时,我希望这个新属性及其值存在:

Public Sub LoadCustomers()
    myContext.Load(myContext.GetCustomersQuery, AddressOf CustomersLoaded, Nothing)
End Sub

Public Sub CustomersLoaded(ByVal loadOp as LoadOperation(Of Customer))
    Dim customers as IEnumerable(Of Customer) = loadOp.Entities
    For Each c as Customer in customers
        dim color as string = c.UnicornColor
    Next
End Sub

1 个答案:

答案 0 :(得分:3)

使用T4s为实体生成部分类(例如Visual Studio扩展库中的POCO T4),然后添加一个文件,例如: MyEntity.Part2.cs与生成的文件具有相同的分部类,但包含新属性。

有关详情,请参阅Google分部课程C#。