2015-10-28 2 views
1

Я разработчик с фоном в Ruby и Node.js, но в настоящее время работает над C# API с Entity Framework & SQL Server.Объект, унаследованный от объекта объекта, помещенного в БД с литым

У меня есть объект 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, поэтому актерский состав не работал.

My Model

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

Надеется, что вы можете помочь, или дать мне некоторые указания на лучший способ сделать это.

ответ

1

Предполагаю, что вы используете db, поэтому вы не просто добавляете IsValid в свой класс. Вы заметите, что классы, созданные Entity Framework, являются частичными классами.

public partial class Fon_Campaign 
{ 
    // generated properties 
} 

Эти классы заменяются Entity Framework, если вы обновите вашу модель из БД, так что вы можете сделать, это создать новую папку (скажем ExtendedEntities) и создать еще один частичный класс себя с тем же пространством имен и имя класса как сгенерированное. Теперь вы можете добавить свой метод «IsValid», и он не будет перезаписан.

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

Второй никогда не будет перезаписан.

Смежные вопросы