2015-10-28 34 views
1

我是一個具有Ruby和Node.js背景的開發,但目前正在使用實體框架& SQL Server的C#API。從一個實體對象繼承的對象放入數據庫與鑄

我有一個實體「Fon_Campaign」,但我想一些方法添加到該實體,所以我增加了一個對象「運動」,從「Fon_Campaign」繼承,並給這個新對象的方法isValid()該款腕錶價值和如果對象是正確的,則回答。

我的API方法

[Route("Campaigns")] 
[HttpPost] 
public HttpResponseMessage CreateCampaigns([FromBody]Campaign campaign) 
{ 
    if (campaign == null) 
    { 
     ErrorMessage resp = new ErrorMessage(); 
     resp.error = "Parameters are missing"; 
     return Request.CreateResponse(HttpStatusCode.BadRequest, resp); 
    } 
    else if (campaign.IsValid()) 
    { 
     Fon_Campaign c = campaign; 

     db.Fon_Campaign.Add(c); // Error: An exception of type 'System.InvalidOperationException' occurred in EntityFramework.dll but was not handled in user code, c is considering like an Campaign value and not Fon_Campaign 
     db.SaveChanges(); 
     return Request.CreateResponse(HttpStatusCode.OK, c); 
    } 
    else 
    { 
     ErrorMessage resp = new ErrorMessage(); 
     // Add some explanation 
     resp.error = "New campaign is invalid"; 
     return Request.CreateResponse(HttpStatusCode.BadRequest, resp); 
    } 
} 

當我試圖保存對象到我的數據庫,我通知這個對象是「運動」,我不能把它放到數據庫,因爲我必須把在Fon_Campaign,所以演員沒有工作。

我的模型

public class Campaign : Fon_Campaign 
{ 
    public bool IsValid() 
    { 
     return true; 
    } 
} 

希望能幫到你,或者給我一些指示爲做一個最好的辦法。

回答

1

我假設你先使用db,這就是爲什麼你不只是將IsValid添加到你的班級。您會注意到實體框架生成的類是部分類。

public partial class Fon_Campaign 
{ 
    // generated properties 
} 

這些類是通過實體框架,如果你更新從數據庫模型覆蓋,所以你可以做的是建立一個新的文件夾(比方說ExtendedEntities)和自己與同一個命名空間創建另一個部分類類名稱作爲生成的名稱。現在你可以在那裏添加你的「IsValid」方法,它不會被覆蓋。

public partial class Fon_Campaign 
{ 
    public bool IsValid() 
    { 
     return true; 
    } 
} 

第二個永遠不會被覆蓋。