EF 6 和 Web API 使用现有实体添加实体时出错



我使用 Web API 创建了一个REST服务,并且首先使用 EF Code 。我的问题是当我添加一个具有现有关系的实体时 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");
            }
        }

谢谢你的帮助。

亚历克斯

如果我覆盖我的方法,那没关系。

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;
    }

但是没有更通用的方法吗?

相关内容

  • 没有找到相关文章

最新更新