向数据库添加新条目总是为外键创建新条目?

问题描述 投票:0回答:2

我是实体框架新手,无法弄清楚为什么存储库总是为其相应的外键表创建新条目?

这是示例:在

GeoLocationType
表中,我向
Classification
表添加了一个名为
Classification_ID
的外键。

我的模型是:

public partial class GeoLocationType : BaseEntity
{
    public YesNoEnum? IsActive { get; set; }
    public YesNoEnum? IsAutoStoreLocation { get; set; }
    public virtual Classification classification { get; set; }
}

public partial class Classification : BaseEntity
{
    public string code { get; set; }
}

现在,每当我保存

GeoLocationType
时,它也会在
Classification
表中创建一个新条目。

代码:

if (model.Classifications_Id > 0)
{
     model.Classifications = _ClassificationRepository
                .Find(p => p.Id == model.Classifications_Id)
                .FirstOrDefault();
}

var entity = Mapper.Map<GeoLocationType>(model);

Validate(entity);

_GeoLocationTypeRepository.Add(entity);
_uow.SaveChanges();

其中

model
是具有
Classifications_Id
的视图模型。

调用

_uow.SaveChanges();
后,它会在
Classification
表中创建一个新条目,并选择它的
primary_key
添加到
GeoLocationType
表中。不知道为什么会发生这种情况,因为
model.Classifications_Id
已经存在于
Classification
表中。

任何帮助将不胜感激。

c# asp.net entity-framework automapper
2个回答
0
投票

在将分类实体设置为 GeoLocationType 实体之前,尝试使用 Attach 方法附加分类实体

if (model.Classifications_Id > 0)
{
  var classification = _ClassificationRepository
     .Find(p => p.Id == model.Classifications_Id).FirstOrDefault();
  _uow.Attach(classification);
  model.Classifications = classification;
}

当您在 ef 中调用 _GeoLocationTypeRepository.Add(entity) 时,它将知道分类实体已存在于 db 中,并将使用它而不是创建新实体。


-1
投票

bool tracked = false
添加到
IRepository
Repository
文件中的方法

I存储库:

void AddProductInCart(ShoppingCart shoppingCart, bool tracked = false);

存储库:

public void AddProductInCart(ShoppingCart shoppingCart ,bool tracked=false)
{
    if (tracked)
    { 
    _dbContext.shoppingCart.Add(shoppingCart);
    _dbContext.SaveChanges();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.