我們首先使用EF 6 Model開發了一個Web應用程序。這個模型的商業邏輯是在一個單獨的PCL項目中。是否有可能在使用本地數據庫的Xamarin.monotouch應用程序中使用編譯後的dll?如果是,如何?有沒有人知道關於這個問題的好文章?如果沒有,有沒有人知道這個問題的解決方法?在Webapp中共享EF 6.0 PCL,xamarin Monotouch IPAD?
我試過谷歌搜索,但沒有找到任何相關結果。
我們首先使用EF 6 Model開發了一個Web應用程序。這個模型的商業邏輯是在一個單獨的PCL項目中。是否有可能在使用本地數據庫的Xamarin.monotouch應用程序中使用編譯後的dll?如果是,如何?有沒有人知道關於這個問題的好文章?如果沒有,有沒有人知道這個問題的解決方法?在Webapp中共享EF 6.0 PCL,xamarin Monotouch IPAD?
我試過谷歌搜索,但沒有找到任何相關結果。
有兩種情況 - 代碼優先或模型優先。兩者都歸結爲條件編譯。
代碼首先要容易得多:
創建EF項目(√完成)
創造一個導入相同的模型類編譯另一個(PCL)項目。製作您需要的PCL類型的其他項目。
在PCL項目中添加一個編譯器符號。在Xamarin studio的項目選項/編譯/編譯器[Define Symbols]中找到它。添加一個新的符號,比如「PCL」
在您的EF代碼環繞所有不與
#if !PCL
public DbSet<Users> {...}
#endif
編譯您也可以添加代碼的項目,只會在顯示PCL或有替代性的定義:
#if !PCL
public ICollection<User> Users{get;set;}
#endif
#if PCL
public List<User> Users{get;set;}
#endif
困難得多的情況是機型第:
class
或using
或namespace
或ICollection
<PropertyGroup>
,更換EF-copy項目的頂級房產組。有設置那裏,使項目PCL,包括<TargetFrameworkProfile>
<Import Project=...>
標記爲EF-複製項目,以取代現有的T4代碼修改:在我自己的.TT我已經編輯身邊線50,其中產生的構造原來
if (collectionNavigationProperties.Any()){
#>
#if !PCL
<#
foreach (var navigationProperty in collectionNavigationProperties)
{
#>
this.<#=code.Escape(navigationProperty)#> = new HashSet<<#=typeMapper.GetTypeName(navigationProperty.ToEndMember.GetEntityType())#>>();
<# } #>
#endif
<#
}
再繞線100,其中,類屬性生成
#if !PCL
<# // this looks like the original .tt
foreach (var navigationProperty in navigationProperties)
{
#>
<#=codeStringGenerator.NavigationProperty(navigationProperty)#>
<#
}
#>
#endif
#if PCL
<# // and this is the copy I've added. Notice it calls a different method, see below
foreach (var navigationProperty in navigationProperties)
{
#>
<#=codeStringGenerator.DeserializeNavigationProperty(navigationProperty)#>
<#
}
#>
#endif
在.TT的NavigationProperty
方法後我已經添加這樣的:
public string DeserializeNavigationProperty(NavigationProperty navigationProperty)
{
string navPropCode = NavigationProperty(navigationProperty);
navPropCode = navPropCode.Replace("ICollection","List");
return navPropCode;
}
更換ICollection
與List
方式,我有一個具體的類型反序列化到。
Thnx爲您的迴應! +1除了我們已經使用模型的第一種方法..它仍然可以這樣做嗎? –
@MarkRijsmus在這裏你去所有的信息 –
Thnx,我們會試試這個。我給你儘可能多的分數,因爲我可能會給。 Thnx花時間回答我的問題!問候。 –