小编Lef*_*une的帖子

模拟使用Moq实现IQueryable的类

我花了一个晚上试图模拟一个实现IQueryable的对象:

public interface IRepo<T> : IQueryable<T>
{
}
Run Code Online (Sandbox Code Playgroud)

我能想到的最好的是这样的:

var items = new Item[] {}.AsQueryable();

var repo = new Mock<IRepo>();
repo.Setup(r => r.GetEnumerator()).Returns(items.GetEnumerator());
repo.Setup(r => r.Provider).Returns(items.Provider);
repo.Setup(r => r.ElementType).Returns(items.ElementType);
repo.Setup(r => r.Expression).Returns(items.Expression);
Run Code Online (Sandbox Code Playgroud)

有没有更简洁的方法来做同样的事情?在IRepo中公开一个返回IQueryable的属性/方法会更容易,并且这样简单地模拟:

repo.Setup(r => r.GetItems()).Returns(new Items[]{ }.AsQueryable());
Run Code Online (Sandbox Code Playgroud)

但这不是我想做的事情=)

c# unit-testing moq mocking

37
推荐指数
3
解决办法
1万
查看次数

实体框架:跟踪FK关联的变化

我在我的DbContext上覆盖了SaveChanges以实现审计日志.使用多对多关系或独立关联相对容易,因为EF为这些关系的任何更改创建了ObjectStateEntries.

我正在使用外键关联,当实体之间的关系发生变化时,所有得到的是ObjectStateEnty,例如实体"Title"的"PublisherID"属性已更改.对于人类而言,这显然是Title实体中的外键,但我如何在运行时确定它?有没有办法将此更改转换为"PublisherID"属性,以使外键所代表的实体成为EntityKey?

我假设我正在处理看起来像这样的实体:

public sealed class Publisher
{
    public Guid ID { get; set; }
    public string Name { get; set; }
    public ICollection<Title> Titles { get; set; }
}

public class Title
{
    public Guid ID { get; set; }
    public string Name { get; set; }
    public Guid? PublisherID { get; set; }
    public Publisher Publisher { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

还有EF EntityConfiguration代码,用于定义关系和外键:

public TitleConfiguration()
{
    HasOptional<Publisher>(t => t.Publisher).WithMany(
            p => p.Titles).HasForeignKey(t => t.PublisherID);
}
Run Code Online (Sandbox Code Playgroud)

我现在正在做的事似乎有点太复杂了.我希望有更优雅的方式来实现我的目标.对于ObjectStateEntry中的每个修改过的属性,我查看当前实体的所有ReferentialConstraints,看看是否有任何一个将它用作外键.从SaveChanges()调用以下代码:

private void …
Run Code Online (Sandbox Code Playgroud)

entity-framework poco code-first ef-code-first entity-framework-4.1

7
推荐指数
1
解决办法
3199
查看次数

Outlook.Explorer.SelectionChange事件只调用一次

我附加到Outlook.Explorer.SelectionChange事件.事件处理程序调用程序集,该程序集从Web服务检索某些数据.在调用该程序集后,当SelectionChange发生时,不再调用我的事件处理程序.

有任何想法吗?

这似乎与装配本身有关,而不是它正在做什么.只需从该程序集创建任何类,就会中断我的加载项中的事件.

.net outlook vsto ms-office outlook-addin

2
推荐指数
1
解决办法
2015
查看次数