在命名我的数据库表时,我更喜欢使用单数名词.但是,首先在EF代码中,生成的表总是复数.我的DbSets是多元化的,我相信是EF生成名称的地方,但我不想将这些名称单一化,因为我认为在代码中使用复数更为实际.我也尝试重写设置,但无济于事.
有任何想法吗?这是我的代码和谢谢.
MyObjectContext.cs
public class MyObjectContext : DbContext, IDbContext
{
public MyObjectContext(string connString) : base(connString)
{
}
public DbSet<Product> Products {get;set;}
public DbSet<Category> Categories {get;set;}
//etc.
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingEntitySetNameConvention>();
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个使用EF代码优先的asp.net MVC3项目.对于我的单元测试,我一直在使用SQL Server CE 4.0和SQL Server 2008 Express.两者都与EF一起完美地生成了我的数据库.
但是,当我在单元测试之外运行我的应用程序并将其指向我的连接字符串时,我得到了错误
ProviderIncompatibleException:提供程序未返回ProviderManifestToken字符串
我已经阅读了关于此的MS文档,看起来这是SqlVersionEF模型生成的标记.问题是我使用代码第一种方法,所以我没有.edmx文件,也不知道在哪里指向我的元数据信息,因为还没有生成数据库.
我知道我的连接字符串,因为db name,username和pass是正确的,因为将它们更改为错误的值会引发预期的错误.不知道从哪里开始.
谢谢.
这是我的连接字符串:
<connectionStrings>
<add
name="SqlConnection"
providerName="System.Data.SqlClient"
connectionString="Data Source=WORKSTATION\SQLEXPRESS;Initial Catalog=CodeFirst;Integrated Security=False;
Persist Security Info=False;User ID=CodeFirst_user;Password=password1;Connect Timeout=120;MultipleActiveResultSets=True;"/>
</connectionStrings>
Run Code Online (Sandbox Code Playgroud) 我试图在Contact表中将SpouseId中的外键引用到Id.这样做的语法是什么?我似乎无法找到一个例子.谢谢.
我有一个这样的课:
public class Contact
{
public int Id {get;set;}
public string Name {get;set;}
public int? SpouseId {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
EDIT1 根据Joel Cunningham提供的链接和Morteza的回答,我添加了一些额外的代码.
ContactMap.cs
public partial class ContactMap : EntityTypeConfiguration<Contact>
{
public ContactMap()
{
this.ToTable("Contact");
this.HasKey(c => c.Id);
this.HasOptional(c => c.Spouse)
.WithMany()
.IsIndependent()
.Map(m => m.MapKey(fk => fk.Id, "SpouseId"));
}
}
Run Code Online (Sandbox Code Playgroud)
MyObjectContext.cs
public class MyObjectContext : DbContext, IDbContext
{
public DbSet<Contact> Contacts {get;set;}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Configurations.Add(new ContactMap());
}
}
Run Code Online (Sandbox Code Playgroud)
注意:我还在我的Contact类中将"[ForeignKey("SpouseId")]"属性添加到我的Spouse属性中.不幸的是,我不断得到"序列包含多个匹配元素".
编辑2: Morteza的答案如下是正确的.总结一下:对于自引用外键,你可以将属性标记为"[ForeginKey("SpouseId")]或使用下面的流畅API示例.我在一些评论中报告的错误是由我的单元测试引起的.所产生的分贝的正确方法.我找到了一个很好的链接,其中 …
有岗位这里,询问如何通过返回EF4 CTP5序列化对象时,解决循环引用错误.我不久前在WCF Web表单项目中遇到了同样的问题.
我能够在我的WCF/Web表单项目和我的MVC3项目中"解决"这个问题.我认为这似乎不是什么类型的项目,因为这似乎是EF序列化的"事物".
我通过在我的ObjectContext构造函数中禁用ProxyCreation解决了这个问题,如下所示:
public class MyObjectContext : DbContext, IDbContext
{
public MyObjectContext(string connectionStringName) : base(connectionStringName)
{
((IObjectContextAdapter)this).ObjectContext.ContextOptions.ProxyCreationEnabled = false;
}
public DbSet<Product> Products {get;set;}
//etc.
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:有人可以解释为什么这似乎可以解决这个问题吗?
我认为这个问题与我的POCO中的导航属性有关,但之后我感到难过.谢谢.
我需要从TFS生成过程中作为nuget软件包还原的一部分下载的软件包中执行命令行实用程序。
在我的本地计算机上,该计算机存储在c:\ users \ me.nuget *中
我尝试在TFS上进行的所有排列都没有成功。我也尝试过\ mydir \ packages也没有成功。
最大的问题是,我必须先运行软件包还原步骤,然后才能查看日志中的任何反馈。那是一些缓慢的调试。
有任何想法吗?谢谢你
我正在使用selenium来测试我的应用程序.我有很多使用$ resource或$ http的ajax调用.如果有一种方法可以以角度方式轮询任何活动的ajax请求,以便selenium可以等到这些请求完成后,那就太好了.
我想我可以在页面上放置一个元素(用于查找selenium)并将其连接到一些成功设置的标志,但这可能会变得非常混乱.
使用这里描述的jQuery时,有一种非常有效的方法可以做到这一点.
或者硒有没有办法做到这一点,我还没有找到?
在文档中找不到任何内容?有什么建议?谢谢.
编辑: Caleb Boyd的答案是正确的,并且是使用硒网络驱动程序检测角度ajax调用问题的一个很好的解决方案.这是我如何使用它的快速实现.我实际上使用了来自此链接的caleb代码的变体,其中包含ajax错误.然而,它基本上是一回事.谢谢Caleb.
将此脚本和元素添加到页面底部.在部署之前删除:
<html>
<head><!--My Angular Scripts--></head>
<body ng-app="MyApp">
<!--Your Html -->
<script>
MyApp.config(function($httpProvider) {
$httpProvider.interceptors.push('requestInterceptor');
})
.factory('requestInterceptor', function($q, $rootScope) {
$rootScope.pendingRequests = 0;
return {
'request': function(config) {
$rootScope.pendingRequests++;
return config || $q.when(config);
},
'requestError': function(rejection) {
$rootScope.pendingRequests--;
return $q.reject(rejection);
},
'response': function(response) {
$rootScope.pendingRequests--;
return response || $q.when(response);
},
'responseError': function(rejection) {
$rootScope.pendingRequests--;
return $q.reject(rejection);
}
};
});
</script>
<span id="http-status">{{pendingRequests}}</span>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我使用NUnit作为我的测试框架.
[TestFixture] …Run Code Online (Sandbox Code Playgroud) 这是一个奇怪的问题,但后来我有一个非常奇怪的情况.在我的开发服务器(IIS和IIS Express)上,我发出一个ajax请求并返回一个表单.然后用户通过ajax帖子发回表单,如果有任何验证错误,控制器会发回部分视图,响应代码为400.在我的ajax方法中,我拦截任何400个错误并重新显示带有验证错误的表单.
我的问题是,当我将我的应用程序上传到我的生产服务器时,所有我得到的验证错误是没有局部视图的400响应.我甚至不知道从哪里开始?这是我尝试过的,我正在使用的库,以及一些示例代码.
ASP.net MVC4,流畅验证,jQuery,不显眼的验证,malsup-ajaxsubmit
在我的生产服务器上......
这是一些代码.
我的表格获取请求:
public ActionResult CreateMedicalEvent(int userId)
{
var model = new EventModel { MedicalEventUserId = userId };
return PartialView("_Event.Create", model);
}
Run Code Online (Sandbox Code Playgroud)
我的表格发布:
[HttpPost]
public ActionResult CreateMedicalEvent(EventModel model)
{
if (!ModelState.IsValid)
{
Response.StatusCode = 400;
return PartialView("_Event.Create", model);//this does not get returned on production server
}
//the rest of my code if validation passess
}
Run Code Online (Sandbox Code Playgroud)
我的ajax方法:
$('.se-form').ajaxForm({
delegation: true,
beforeSubmit: function() {
ajaxHelpers.modalProcess();//modal progress bar
},
success: function(data) {
$.modal.close();
//handle …Run Code Online (Sandbox Code Playgroud) 如果控制器操作中的实体属性已更改且未调用Update/SaveChanges,那么该实体是否会自动更新?
我正在使用带有存储库模式的EF 4.1.我处理我的EfRepository类中的所有CRUD操作,如下所示:
public void Update(T entity)
{
try{_context.SaveChanges();}
catch{//do stuff}
}
//etc.
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中,我有一个ajax/ActionResult调用,它从db获取实体,执行一些基本计算,并返回一个JSON对象.总而言之,我发现我在ActionResult中使用的静态帮助程序中的一个错误,它正在更改我的实体上的属性值而不是我返回的JSON模型.
我的操作方法没有更新方法,但每次调用此操作时我的实体都会更新.使用Sql Profiler我确认了一个更新语句,该语句是为了更新我的实体和我的错误静态方法正在改变的one(1)属性而定制的.
我在我的存储库类的Update方法中设置了一个断点,即使我的实体正在由EF更新,我也从未调用过MY Update方法.IDbSet中接口方法'Find'(我使用的)的摘要说,
查找具有给定主键值的实体.如果上下文中存在具有给定主键值的实体,则会立即返回该实体而不向商店发出请求.否则,向具有给定主键值的实体的商店发出请求,并且如果找到该实体,则将该实体附加到上下文并返回.如果在上下文或存储中找不到实体,则返回null.
有一些真正的好例子在这里为好.
我认为鉴于我的实体已经附上,我的问题的简短回答是'是'.但是对于EF来说有点新,我发现这是一个非常难以弄清楚的错误,因为它仍然会出现一些我无法追踪的事情.我在将这个问题作为一个问题犹豫不决,但认为有更多知识渊博的人可以扩展我对YES的假设答案,并且至少帮助其他人遇到这个问题.
我的问题是关于redux商店中分页数据形状的这个优秀问题和答案的延续.我在角度2应用程序中使用ngrx/store.
{
entities: {
users: {
1: { id: 1, name: 'Dan' },
42: { id: 42, name: 'Mary' }
}
},
visibleUsers: {
ids: [1, 42],
isFetching: false,
offset: 0
}
}
Run Code Online (Sandbox Code Playgroud)
基于上述形状,我相信如果来自传入请求有效负载的偏移(或页面,排序等)发生变化,则可见用户将通过调用DB来改变用户实体.我有一些动作和reducer函数来处理它,它按预期工作.如果偏移量保持不变并且用户以他们离开的方式返回页面,则应该由商店而不是DB返回用户实体.
当我奋力就是把那个逻辑和rxjs运营商使用(仍然在学习这一点).
我认为正确的地方是一种效果.以下是我现在在angular2应用程序(我正在注入Actions,Store和我的UserService)中的内容,每次加载页面时都会提取新数据.
@Effect loadUsers$ = this.actions$
.ofType('LOAD_USERS')
.switchMap(() => this.userService.query()
.map((results) => {
return new LoadUsersSuccessAction(results);
}))
.catch(() => Observable.of(new LoadUsersFailureAction()));
Run Code Online (Sandbox Code Playgroud)
我最好的想法是这样的:
@Effect loadUsers$ = this.actions$
.ofType('LOAD_USERS')
.withLatestFrom(this.store.select(state => state.visibleUsers.offset))
.switchMap(([action, state]) => {
//something that looks like this??
//this …Run Code Online (Sandbox Code Playgroud) javascript ×2
ajax ×1
angular ×1
angularjs ×1
azure-devops ×1
c# ×1
code-first ×1
jquery ×1
json ×1
ngrx ×1
ngrx-effects ×1
redux ×1