- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的解决方案中,我有一个域项目和一个数据访问项目。 My Domain 项目包含各种存储库的域对象和接口(interface),以及包含我所有存储库的 UnitOfWork 的接口(interface)。我的 DataAccess 项目包含所有这些接口(interface)的实现和我的域对象的 EF 版本。
因此,如果我有一个名为 Person
的类,并且我想将一个 Person
添加到数据库中,它将如下所示:
unitOfWork.People.Add(person);
unitOfWork.Complete();
在 unitOfWork.People.Add(person)
内部,我使用 AutoMapper 将我的域 Person
对象映射到我的 EF Person
对象。然后我将我的 EF Person
对象添加到 EF DbContext
对象。
public void Add(Person person) {
DataAccess.Entities.Person dbPerson = Mapper.Map<DataAccess.Entities.Person>(person);
dbContext.People.Add(dbPerson);
}
Complete() 函数只是包装了 SaveChanges()。
public int Complete() {
dbContext.SaveChanges();
}
通常 EF 会在插入后更新插入对象的数据库生成的 ID。但在这种情况下,EF 对我的 Domain Person 对象一无所知。
因为我的域人员对象没有它的 ID,所以我无法更新数据库条目或从数据库中重新获取它。
我能想到的唯一替代方法是在服务器上生成一个 guid 并将其用作 ID。但这会以两个 ID 的形式产生冗余。它也不是非常用户友好,因为用户将在搜索字段中引用此 ID。记住 ID 135 比记住 guid 简单得多。
有没有办法让 dbContext 直接更新域对象的 ID,或者让 ID 在层中向上冒泡?
最佳答案
你可以尝试这样的事情。
存储库
public class GenericRepository<TEntity> where TEntity : class
{
internal DbContext context;
internal DbSet<TEntity> dbSet;
public GenericRepository(DbContext context)
{
this.context = context;
this.dbSet = context.Set<TEntity>();
}
public virtual TEntity Insert(TEntity entity)
{
dbSet.Add(entity);
return entity;
}
}
这样使用
var uow = new UnitOfWork();
var added = uow.StudentReposiotry.Insert(new Student
{
Name = "Repository",
RegistrationNo = "BSE-2018-004",
Date = DateTime.Now,
Department = "Philosphy",
Email = "test@"
});
uow.Save(); //if its saved.
long id = added.Id;
我添加了一个名为 DataProvider 的单独层,它有助于让我的实体仅在 Repository 中存在,所有来自 DataProvider 的东西都在谈论 DTO。
public class StudentDataProvider : DataProviderBase
{
public StudentDto Insert(Student dto)
{
var entity = new Student{ Name = dto.Name,Deparment= dto.Deparment};
var addedItem = unitofwork.StudentReposiotry.Insert(entity);
unitofWork.Save();
dto.Id = addedItem.Id;
return dto;
}
public StudentDto AddAndUpdate(StudentDto dto, StudentDto updateDto)
{
var entity = new Student{ Name = dto.Name,Deparment= dto.Deparment};
var update= new Student{ Name = updateDto.Name,Deparment= updateDto.Deparment};
var addedItem = unitofwork.StudentReposiotry.Insert(entity);
var updateItem= unitofwork.StudentReposiotry.Update(update)
unitofWork.Save();
dto.Id = addedItem.Id;
return dto;
}
}
public class DataProvideBase
{
protected IUnitOfWork UnitOfWork;
public DataProvideBase()
{
UnitOfWork = new UnitOfWork();
}
}
关于c# - 使用存储库模式时如何取回数据库生成的 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36868254/
如何处理在 EditText 上键入时按返回键的事件?当显示虚拟键盘并且用户按回时,它会被隐藏。我想处理这个事件,但是在 EditText 中设置 OnKeyListener 并没有帮助。 最佳答案
我编写了 SMS 应用程序,并为其编写了 BroadcastReceiver。我想从 BroadcastReceiver 获取数据到我的 Activity 中,那么我该如何获取呢。 我的广播接收器代码
有一个场景,其中 httpentity 在 InputStream 中有图像的二进制数据,为了进一步处理,它被转换为库文件中的字符串 [String str = EntityUtils.toStrin
如何获取 uiwebview 的返回和转发 URL。我想要 URL,以便我可以相应地启用和禁用我的网络浏览器上的后退和前进按钮 谢谢 最佳答案 UIWebView 包含后退或前进的构建方法 只需使用执
CGRect rect = Temp_3_Artwork_Big_Image.frame; NSLog(@"Rect : %.2f,%.2f,%.2f,%.2f",rect.origin.x,rect
在返回旧项目并更新其依赖项后,我必须意识到,自版本 1.1.5 以来,logback 不再将 MDC 传播给子项:https://github.com/qos-ch/logback/commit/aa
holder.js 我想向我的页面动态添加占位符图像。 这样插入是行不通的: $('',{class:'file-item'}) .append($('',{'data-src':'holde
我在 C# 中使用 ExecuteOracleNonQuery 来使用存储过程将记录插入到我的 Oracle 数据库中,但似乎无法返回 ROWID。 在 C# 中 ... using (OracleC
我正在努力将一条记录插入到 postgresql 中: val res = DB.withConnection { implicit con => SQL(
我是新手,正在尝试使用 React 和 Redux 构建一个简单的书签应用程序。 我无法解决这个问题: 用户可以创建一个书签并将其添加到多个文件夹。所以我发送一个 addMark(bookmark)
我有一个像下面这样的网址 /pages/edit_product/11 在我的行动 edit_product我怎样才能得到 id 11 这样我就可以做@p = Product.find_by_id(1
我在php中有一个外部文件,输出为json格式 我希望数据以数组的形式发送回 jquery ....该怎么做? php: $options = "data 0 data 1 data 2 data 3
我有以下 C++ 代码: __declspec(dllimport) char* get_mac() { size_t byteToAlloc = 17; char *mac_addr
我正在编写一个 Azure 函数,该函数从 Microsoft 获取 OAuth token ,我已经成功获取了该 token 。我正在尝试使用该 token 访问 Microsoft Graph。我
我有一个 Python Google App Engine 应用程序,我想在 Emacs 中的开发服务器上进行调试。我创建了一个 pdb 可执行文件,以便在 Emacs 中进行调试: $ which
我正在开发一个 google chrome 扩展程序,需要在其中对 Twitch 上的用户进行身份验证。根据https://github.com/justintv/Twitch-API/blob/ma
我有一个简单的 Web API,它返回一个 Iobservable。我正在使用 HttpClient 获取 Observable,以便我可以订阅它。我的问题是订阅时返回的 Iobservable 发出
我正在使用 Ionic 2 构建 Web 应用程序的移动版本,该应用程序使用 SAML 进行 SSO,在我的客户端服务器上运行。现在我们有一个 api,当您未登录网站时会调用它,该网站会重定向到他们的
几个月前,我创建了一个使用 oauth2 与谷歌进行身份验证的 rails 应用程序 - 特别是 omniauth-google-oauth2 gem。我已经完成了创建身份验证和存储刷新 token
我正在尝试将一个值作为 JSON 从我的后端传递到我的应用程序的前端。我目前正在运行 express.js 并且所有发布方法的连接都是完美的。 在我的应用程序的前端单击按钮后,我想从我的服务器取回发票
我是一名优秀的程序员,十分优秀!