WCF中的Http传输通道默认使用持久HTTP连接.如何控制这些连接的活动超时?默认值为100秒.我通过监控Procmon中的应用程序找到了这个值.我没有在http传输绑定元素中找到配置此超时的任何设置.有没有可以控制超时的.NET类?
我首先使用代码,可以毫无问题地添加记录.正确创建数据库并且没有任何问题地播种.但是在我的编辑操作中调用SaveChanges()只会更新实体,而不会更新任何导航或引用属性.
我的模型的简化版本:
public class Contact : IMyBaseObject
{
public Contact()
{
this.Delete = false;
this.ContactTypes = new HashSet<ContactType>();
}
public int Id {get; set;}
public string Name {get;set;}
public bool Delete {get;set;}
public virtual ICollection<ContactType> ContactTypes { get; set; }
public virtual USState USState { get; set; }
}
public class ContactType : MyBaseObject
{
public ContactType()
{
}
public int Id {get; set;}
public string Name {get;set;}
public virtual ICollection<Contact> Contacts {get;set;}
}
public abstract class Territory : MyBaseObject …Run Code Online (Sandbox Code Playgroud) 如何在不先检索记录的情况下更新记录的单个属性?我在EF Code First 4.1的背景下提出要求
说我有一个类User,映射到数据库中的表Users:
class User
{
public int Id {get;set;}
[Required]
public string Name {get;set;}
public DateTime LastActivity {get;set;}
...
}
Run Code Online (Sandbox Code Playgroud)
现在我想更新用户的LastActivity.我有用户名.我可以通过查询用户记录,将新值设置为LastActivity,然后调用SaveChanges()来轻松完成.但这会导致冗余查询.
我通过使用Attach方法来解决.但是因为EF在Name上抛出了验证异常,如果它为null,我将Name设置为随机字符串(不会更新回DB).但这似乎不是一个优雅的解决方案:
using (var entities = new MyEntities())
{
User u = new User {Id = id, Name="this wont be updated" };
entities.Users.Attach(u);
u.LastActivity = DateTime.Now;
entities.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
如果有人能为我提供更好的解决方案,我会非常高兴.请原谅我有任何错误,因为这是我第一次就SO提问.
当我调用此代码时:
using (var connection = new SqlConnection(connectionString))
{
var command = new SqlCommand("SELECT * FROM Table", connection);
connection.Open();
using (var reader = command.ExecuteReader())
{
while(reader.Read())
{
// Do something here
}
}
}
Run Code Online (Sandbox Code Playgroud)
内部会发生什么?这在网络层面如何运作?是否会为每次调用进行新的数据库往返,Read或者内部是否有批量读取?
我这么问是因为我刚才读的ODP.NET提供FetchSize两个属性OracleCommand和OracleDataReader我的理解是多少记录应通过单次往返于数据库中预装的定义.我想知道SQL Server是否以类似的方式工作,并且是否存在可以在某处配置的类似行为.我没有找到任何这样的配置SqlCommand,SqlDataReader或CommandBehavior.
我目前的项目需要与外部系统进行日常同步.同步基于复杂的导入文件结构,该结构使用广泛的业务逻辑进行解析和处理.由于业务逻辑,我们决定在.NET代码中实现这一点,并重用现有的BL组件,而不是在存储过程或集成服务中编写相同的逻辑.
BL层位于EF 4.0数据访问层的顶部.当前实现过程导入批处理,将所有更改填入ObjectContext并在事务中执行SaveChanges.当我检查SQL分析器时,我看到EF将每个实体更改作为单个SQL命令执行(具有自己的往返DB的往返).此外,看起来这些命令是完全顺序执行的.所以我有多达100.000往返数据库进行初始导入,以及10.000 - 50.000往返数据库进行日常同步.
是否可以通过EF本身或某些提供商/扩展程序以某种方式批量插入/更新/删除命令?
我在我的开发框上有一个名为ApplicationName_Development的数据库在SQL Server 2008 R2 Developer Edition上运行.
我没有问题地将.NET成员资格表添加到数据库中.当我试图让Code First工作时,我收到以下错误消息:
服务器遇到处理请求的错误.异常消息是"无法检查模型兼容性,因为数据库不包含模型元数据.请确保已将IncludeMetadataConvention添加到DbModelBuilder约定中.
经过一些谷歌搜索,我发现我必须删除数据库,让EF创建数据库.这没关系,但我丢失了所有的.NET会员表.我可以返回并再次添加成员资格表,但如果我的模型更改并且EF需要重新创建数据库,那么我必须再次添加成员资格表.
我该如何解决这个问题?
我想使用LINQ和我的EntityFramework上下文定义数据库查询,但我不希望返回实体; 我想要一个datareader!
我怎样才能做到这一点?这用于将行导出为CSV.
干杯,伊恩.
我正在使用EF 4.1来构建域模型.我有一个带有Validate(字符串userCode)方法的Task类,在其中我想确保用户代码映射到数据库中的有效用户,因此:
public static bool Validate(string userCode)
{
IDbSet<User> users = db.Set<User>();
var results = from u in users
where u.UserCode.Equals(userCode)
select u;
return results.FirstOrDefault() != null;
}
Run Code Online (Sandbox Code Playgroud)
我可以使用Moq来模拟IDbSet没问题.但是在Where调用时遇到了麻烦:
User user = new User { UserCode = "abc" };
IList<User> list = new List<User> { user };
var users = new Mock<IDbSet<User>>();
users.Setup(x => x.Where(It.IsAny<Expression<Func<User, bool>>>())).Returns(list.AsQueryable);
Initialization method JLTi.iRIS3.Tests.TaskTest.SetUp threw exception.
System.NotSupportedException: System.NotSupportedException: Expression
references a method that does not belong to the mocked object:
x => x.Where<User>(It.IsAny<Expression`1>()).
Run Code Online (Sandbox Code Playgroud)
除了创建一个间接级别(例如,使用ServiceLocator来获取运行LINQ的对象然后模拟该方法)之外,我想不出怎么测试这个,但我想确保以前没办法我介绍另一层.而且我可以看到经常需要这种LINQ查询,因此服务对象很快就会失控.
某种灵魂有帮助吗?谢谢!
我想为插入和更新某些EF对象的事件添加一些逻辑.我有一个带有category对象的MVC应用程序,它有一个属性,它是name属性的一个slugified版本.
public class Category
{
public string Name { get; set; }
public string UrlName{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想仅在插入和更新事件上设置UrlName属性,因为我的slugify逻辑非常精细.
我知道我可以在上下文本身的SaveChanges()函数中添加一些逻辑,但我更愿意将代码放在实体本身附近.
有没有办法首先使用EF代码完成这样的事情?
我在我的项目中为Framework 4.0安装了Entity Framework 5.0 RC.但是当我尝试从Views中获取数据时,我得到了错误.EF尝试为此实体创建表.
.net ×3
ado.net ×2
events ×1
linq ×1
moq ×1
odp.net ×1
oracle ×1
sql-server ×1
tdd ×1
unit-testing ×1
validation ×1
wcf ×1