我是具有Ruby和Node.js背景的开发人员,但目前正在使用Entity Framework& SQL Server。
我有一个实体" Fon_Campaign",但我想为这个实体添加一些方法,所以我添加了一个对象" 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);
}
}
当我尝试将对象保存到我的数据库中时,我通知此对象是" Campaign"并且我无法将其放入数据库,因为我必须输入Fon_Campaign
,因此演员无法工作。
我的模特
public class Campaign : Fon_Campaign
{
public bool IsValid()
{
return true;
}
}
希望你能提供帮助,或者给我一些指示,以便找到最佳方法。
答案 0 :(得分:1)
我假设您首先使用数据库,这就是为什么您不只是在您的课程中添加IsValid
。您会注意到Entity Framework生成的类是部分类。
public partial class Fon_Campaign
{
// generated properties
}
如果您从db更新模型,这些类将被Entity Framework覆盖,因此您可以做的是创建一个新文件夹(让我们说是ExtendedEntities)并自己创建另一个部分类与生成的名称空间和类名相同。现在你可以添加你的" IsValid"那里的方法,它不会被覆盖。
public partial class Fon_Campaign
{
public bool IsValid()
{
return true;
}
}
第二个永远不会被覆盖。