如何使用Portable Class Library和EF Code-first?

Mad*_*ann 9 portable-class-library entity-framework-4.1

我正在做一个Windows Phone应用程序,我在Azure中运行WebApi.

我正在为我的"模型"项目使用新的"可移植类库"(http://msdn.microsoft.com/en-us/library/gg597391.aspx),这是我的WebApi项目共享的原因(这是一个normale ASp.NET MVC 4项目)和我的Windows Phone项目.

这很好用,模型(POCO)类按照我的要求进行序列化和反序列化.

现在我想开始存储我的一些Models/POCO对象,并希望首先使用EF Code-first,但这是一个问题,因为我无法将EntityFramework程序集添加到我的"Portable Class Library"项目中,并且我真的不喜欢,因为我只需要在我的Models项目中使用一小部分(属性).

那么,对于如何采用这种最佳方式的任何建议呢?

更新:好吧,似乎我实际上可以将EntityFramework程序集添加到项目中,但这并没有真正帮助我,因为我需要使用的属性存在于不能在Windows Phone上使用的System.ComponentModel.DataAnnotations中.有什么建议吗?

Lad*_*nka 12

不要使用属性.使用流畅的API代替并为持久性(EF)创建单独的程序集,它将引用您的模型程序集.您的WebAPI层将使用持久性程序集.


sab*_*our 7

我使用的修改方法不是Mikkel Hempel,不需要使用预处理指令.

  1. 创建一个标准的.NET类库,称之为Models
  2. 创建表示您要共享内容的分部类

    public partial class Person
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 对于非可移植代码(如DataAnnotations),创建另一个分部类并使用元数据

    [MetadataTypeAttribute(typeof(Person.Metadata))]
    public partial class Person
    {
        internal sealed class Metadata
        {
            private Metadata() { } // Metadata classes shouldn't be instantiated
    
            // Add metadata attributes to perform validation
            [Required]
            [StringLength(60)]
            public string Name;
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 创建一个可移植类库,并添加第2步"As Link"中的类