2011-06-21 131 views
3

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

我该怎么做?

备注:如果这样可以更容易,对于我的特定实例,我不需要将实体保存回数据库。另外,如果这适用于视图和表格,那就太好了。

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

我的例子:

数据库:客户表

  • 的CustomerID
  • 客户名称

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

  • 公共属性CustomerID作为整数
  • 公共财产作为客户名称字符串

我想属性添加到未与数据库相关联的客户实体:

  • 公共财产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 
+0

这是Code First还是什么? – OpticalDelusion

+0

我正在从现有数据库生成我的EF模型。 – sparks

+0

为了更清楚地说明,我正在使用ADO.NET实体数据模型模板和实体数据模型向导来生成我的模型和实体,如下面的“显示数据”部分所述:http://msdn.microsoft。com/en-us/library/ff713719%28v = VS.91%29.aspx我也按照演练中所述创建了我的域服务。 – sparks

回答

3

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

欲了解更多信息Google偏分类C#。

+0

此解决方案是否允许RIA Services在客户端创建新属性,并在查询期间将这些属性的值从服务器移动到客户端? ---------- 我目前有EF从数据库中生成我的实体。我试着向Customers和一个新的属性(在ASP.NET服务器端项目中)添加一个部分类。但是,RIA Services不会为我的客户客户实体创建财产。 – sparks

+0

您是否在新属性上添加了DataMember属性? –

+0

将DataMember属性添加到新的属性中。谢谢。 – sparks

相关问题