2012-08-11 100 views
9

我正在做一個Windows Phone應用程序,我有一個在Azure中運行的WebApi。如何使用可移植類庫和EF代碼優先?

我爲我的「模型」項目使用新的「可移植類庫」(http://msdn.microsoft.com/en-us/library/gg597391.aspx),這是因爲我的WebApi項目(這是一個normal ASp.NET MVC 4項目)和我的Windows Phone項目。

這很好用,模型(POCO)類被序列化和反序列化,就像我想的那樣。

現在我想開始存儲一些我的Models/POCO對象,並希望爲此使用EF Code-first,但這是一個問題,因爲我無法將EntityFramework程序集添加到「可移植類庫「項目,我真的不想或者因爲我只需要我的Models項目中的一小部分(屬性)。

那麼,任何建議如何一個方法這是最好的方式?

UPDATE: 嗯,好像我其實可以添加的EntityFramework組件項目,但並沒有真正幫助我,因爲我的屬性需要System.ComponentModel.DataAnnotations哪些不能用生活在Windows Phone上使用。 還有什麼建議嗎?

回答

12

請勿使用屬性。相反,使用流暢的API併爲持久性(EF)創建單獨的程序集,它將引用您的模型程序集。持久性程序集將被您的WebAPI圖層使用。

+0

謝謝,不知道EF有一個流利的API。看起來像你在那裏建議的一個很好的解決方案,我會試試看。 – 2012-08-12 12:40:35

+0

知道這是很長的時間,因爲我問這個問題,但這種方法對我來說工作非常好 - 謝謝:) – 2013-06-11 07:10:35

+1

說明如何做到這一點? – sabbour 2013-07-21 07:56:44

3

當我需要在多個平臺我的域名項目,我通常:

  1. 創建的域代碼
  2. 爲每個平臺創建一個特定於平臺的類庫標準的.NET類庫項目
  3. 對於每個特定於平臺的類庫,我將標準.NET類庫中的文件添加爲鏈接(添加現有文件 - >作爲鏈接),因此當您編輯鏈接文件或原始文件時它們會自動更新。
  4. 當我將一個新文件添加到.NET類庫時,我將它添加爲指向特定於平臺的類庫的鏈接。
  5. 平臺特定的屬性(即作爲DataAnnotations-assembly一部分的Table和ForeignKey)可以使用預處理器標籤選擇出來。比方說,我有一個.NET類庫帶班並與鏈接的文件一個Silverlight項目,那麼我就可以做包括.NET特有的屬性:

    #if !SILVERLIGHT 
    [Table("MyEntityFrameworkTable")] 
    #endif 
    public class MyCrossPlatformClass 
    { 
        // Blah blah blah 
    } 
    

,只包括DataAnnotations - .NET類庫中的程序集。

我知道它比使用可移植類庫更多的工作,但不能像上例中那樣在PCL中選擇屬性,因爲只允許引用共享程序集(這又是DataAnnotations不是) 。

7

我使用了比Mikkel Hempel's更改的方法,而不需要使用預處理指令。

  1. 創建一個標準。.NET類庫,稱之爲模型
  2. 創建表示要共享

    public partial class Person 
    { 
        public int Id { get; set; } 
        public string Name { get; set; } 
    } 
    
  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; 
        } 
    } 
    
  4. 創建一個可移植類庫,和從第2步添加類「作爲鏈接」