【问题标题】:Is there a way to compile entityframework dataannotations in silverlight?有没有办法在 Silverlight 中编译实体框架数据注释?
【发布时间】:2012-08-17 02:10:05
【问题描述】:

我正在使用 MVC WebAPI 为 silverlight 应用程序提供动力。 POCO 对象在 MVC 和 Silverlight 之间共享。所有的 POCO 都在一个 .Net 类库中,我创建了一个 Silverlight 类库,所有的 POCO 都添加为链接,以便我可以共享代码。不幸的是,这会导致数据注释出现问题,因为 Silverlight 类库无法引用 EntityFramework.dll,因此无法编译 [ForeignKey] 等属性。

我最终将所有注释都包装成这样:

#if !SILVERLIGHT
        [ForeignKey("SecurityGroupID")]
#endif
        public virtual SecurityGroup SecurityGroup { get; set; }

有没有人想办法不让#if !SILVERLIGHT 包装所有注释? ([Column]、[Table]、[ForeignKey] 等?)。

我考虑过的一个可能的解决方案是在子命名空间 (MyProject.FakeAttributes) 中创建具有匹配构造函数的空白属性,然后在 Silverlight 版本中导入该命名空间。有人认为该解决方案有任何问题吗?

【问题讨论】:

    标签: c# silverlight entity-framework entity-framework-4


    【解决方案1】:

    我不得不建议不要在 Silverlight 中使用您的实体。由于对象图中的延迟加载和循环等问题,实体通常不能很好地与 WCF 配合使用。帮自己一个忙,做 dtos。

    如果您不打算使用 dtos。在我制作虚假属性之前,我会使用#ifs

    【讨论】:

    • 我想我的帖子中可能有一些术语搞砸了。我使用 EF 4.3.1 与我的数据库交互,但我加载了 DTO 对象。加载对象时,我不使用任何类型的导航属性。这些属性确实存在,但仅是为了让 EF 知道如何正确保存对象。
    • 从实体框架加载的对象是实体,即使您不是从“实体”基类继承。您的实体可以是 POCO 类。
    • 另外,我刚刚注意到我在第一句话中留下了一个重要的词。它应该是“我必须推荐反对在 Silverlight 中使用您的实体。”我已经更新了我的答案。
    • 我将如何使用 DTO?它是一个不同的框架吗?
    • DTO 代表数据传输对象。这将是一个单独的类,仅用于将数据传入和传出客户端(Silverlight)。 DTO 通常是 POCO 类,对于 WCF,它们应该具有的唯一属性是 DataContractDataMember。但是,这些不是必需的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-13
    • 2019-07-27
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多