【问题标题】:"Read-Only" Entity Framework? I'm trying to use RIA Services, EF, and Silverlight“只读”实体框架?我正在尝试使用 RIA 服务、EF 和 Silverlight
【发布时间】:2009-09-29 15:12:21
【问题描述】:

我正在尝试在 silverlight 客户端中显示 MySQL 服务器数据,而我目前的攻击计划是使用 Entity Framework 到 MySQL,并通过 RIA 服务提供 Silverlight 客户端和 Entity Framework 之间的数据访问。

但是,我只是试图向用户呈现数据,我不希望我或其他人能够更改 MySQL 中的数据。

简而言之,我希望有一种方法可以简单地忽略所有实体类型的设置器。我只想要吸气剂。我想要对 MySQL 的“只读”访问。但是,似乎我唯一的选择是将每个字段上的“Setter”更改为 InternalPrivateProtected公开

有没有更好的方法来完成我想做的事情?

【问题讨论】:

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


    【解决方案1】:

    如果您使用 RIA 服务...

    当您创建域服务类(本质上就是 RIA)时,它会弹出一个对话框,您可以单击“启用编辑”。在您的情况下,不要单击它,并且不会生成任何编辑功能。

    RIA Services 用于连接服务器和客户端,它只是不能生成 CRUD 的 CUD 部分


    (来源:silverlightshow.net

    【讨论】:

      【解决方案2】:

      请注意,我从未使用过 RIA 服务,据我了解,它是建立在 ADO.NET 数据服务之上的。没有办法(据我所知)停止在 Silverlight 生成的代理中创建属性设置器,但是您可以在其静态 InitializeService() 方法中使用一些代码来锁定数据服务本身:

      public class MyDataService : DataService<MyEntityModel>
      {
          public static void InitializeService(IDataServiceConfiguration config)
          {
              // make all entity sets read-only:
              config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
      
              // make the (example) CommentEntitySet read/writeable:
              config.SetEntitySetAccessRule("CommentEntitySet", EntitySetRights.All);
          }
      }
      

      使用此方法,数据服务将禁止对除CommentEntitySet 之外的任何实体集进行更改(我将其包括在内是为了说明您可以在第一行之后覆盖对单个实体集的访问规则的方式,这将设置所有实体集的默认访问规则为AllRead)。

      【讨论】:

      • 所以您会将其锁定在中间层(RIA 服务、ADO.NET 数据服务)而不是模型本身?
      • 没错,这样就可以保证没有人(甚至是绕过您的 Silverlight 应用程序的黑客)可以通过数据服务将更改推送到模型。
      • 很难只选择一个答案!你的也很有帮助。非常感谢! (另外,我觉得很讽刺的是另一个“Ben M”是第一个回答我的问题的:-)。
      • 很高兴为您提供帮助 .. tehp 的回答更适用于 RIA 服务。 :-)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-04
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多