我使用Web API创建了一个REST
服务,我使用的是EF Code First。
我的问题是,当我添加一个具有现有关系的实体foreignId = 1
时,EF会向我添加关系并使用foreignId = 2
返回我的实体。
POST object
{
"nom":"Test",
"actif":true,
"provinceId":1,
"province":{
"id": 1,
"nom": "Province ok",
"actif": true
}
}
Return object
{
"id": 1,
"nom": "Test",
"actif": true,
"provinceId": 2,
"province": {
"id": 2,
"nom": "Province ok"
},
}
我还会使用这种风格的存储库模式。
public abstract class ServiceCrud<TEntity> : ServiceBase
where TEntity : EntityBase
{
public virtual object Get()
{
// Context.
return Ctx.Set<TEntity>().OrderBy(x => x.Nom).ToList();
}
public virtual async Task<object> Get(int id)
{
// Context.
var entity = await Ctx.Set<TEntity>().FindAsync(id);
// Return.
return entity;
}
public virtual async Task<object> Add(TEntity entity)
{
// Check Validity.
CheckValidity(entity);
// Context.
Ctx.Set<TEntity>().Add(entity);
await Ctx.SaveChangesAsync();
// Return.
return entity;
}
public virtual async Task<object> Update(TEntity entity)
{
// Check Validity.
CheckValidity(entity);
// Context.
Ctx.Entry(entity).State = EntityState.Modified;
await Ctx.SaveChangesAsync();
// Return.
return entity;
}
public virtual void CheckValidity(TEntity entity)
{
// Nom unique.
var entityBase = Ctx.Set<TEntity>().AsNoTracking().FirstOrDefault(x => x.Nom == entity.Nom);
if (entityBase != null && (entity.Id == null || entity.Id != entityBase.Id))
throw new ValidationException("Le nom doit être unique");
}
}
感谢您的帮助。
亚历
答案 0 :(得分:0)
如果我覆盖我的方法,那没关系。
public override async Task<object> Add(Commune entity)
{
// Check Validity.
CheckValidity(entity);
// Context.
Ctx.Set<Commune>().Add(entity);
Ctx.Set<Province>().Attach(entity.Province);
await Ctx.SaveChangesAsync();
// Return.
return entity;
}
但是没有更通用的方法吗?