小编Era*_*nga的帖子

如何实现IEqualityComparer返回不同的值?

我有一个L2E查询返回一些包含重复对象的数据.我需要删除那些重复的对象.基本上我应该假设如果他们的ID是相同的,那么对象是重复的.我试过了q.Distinct(),但仍然返回了重复的对象.然后我尝试实现自己的IEqualityComparer并将其传递给Distinct()方法.该方法失败,并带有以下文字:

LINQ to Entities无法识别方法'System.Linq.IQueryable 1[DAL.MyDOClass] Distinct[MyDOClass](System.Linq.IQueryable1 [DAL.MyDOClass],System.Collections.Generic.IEqualityComparer`1 [DAL.MyDOClass])'方法,并且此方法无法转换为商店表达式.

这是EqualityComparer的实现:

  internal class MyDOClassComparer: EqualityComparer<MyDOClass>
    {
        public override bool Equals(MyDOClass x, MyDOClass y)
        {
            return x.Id == y.Id;
        }

        public override int GetHashCode(MyDOClass obj)
        {
            return obj == null ? 0 : obj.Id;
        }
    }
Run Code Online (Sandbox Code Playgroud)

那我该怎么写自己的IEqualityComparer呢?

c# entity-framework distinct iequalitycomparer

44
推荐指数
4
解决办法
6万
查看次数

实体框架代码优先和连接字符串问题

我首先使用Entity Framework 4.1代码时收到此错误.我找不到任何确切使用的来源.

Unable to load the specified metadata resource.

<add name="DataContext" connectionString="metadata=res://*/GrassrootsHoopsDataContext.csdl|res://*/GrassrootsHoopsDataContext.ssdl|res://*/GrassrootsHoopsDataContext.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=myserver.com;Initial Catalog=MyDataBase;Persist Security Info=True;User ID=username;Password=password&quot;" providerName="System.Data.EntityClient" />
Run Code Online (Sandbox Code Playgroud)

entity-framework connection-string ef-code-first entity-framework-4.1

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

将错误消息添加到@ Html.ValidationSummary

我正在使用标准的MVC3 Razor视图和不显眼的Javascript验证,@Html.ValidationSummary用于在表单的顶部显示它们.如果标准验证(类似的东西[Required])通过,我会运行一些非常自定义的客户端验证,当用户点击提交按钮时会激活该验证.(验证查看了许多表单元素,以确保已经检查了它们的正确集合等,因此它不像仅为单个字段创建新的自定义验证器那么简单).

我希望我在那里构建的可能错误显示在ValidationSummary列表中,但我无法弄清楚如何让错误消息出现在那里.

unobtrusive-validation asp.net-mvc-3

26
推荐指数
2
解决办法
3万
查看次数

.NET实体框架 - IEnumerable VS. IQueryable的

请看这行代码.这是一个存储过程的调用,它返回一个ObjectResult<long?>.为了提取长值,我添加了Select:

dbContext.FindCoursesWithKeywords(keywords).Select(l => l.Value);
Run Code Online (Sandbox Code Playgroud)

基于intellisense,这个Select返回IEnumerable<long>.

我不确定我是否在某处读过它或者只是习惯了这个假设 - 我一直认为当EF API返回IEnumerable(而不是IQueryable)时,这意味着结果已经实现.意味着他们已从数据库中撤出.

我今天发现我错了(或者这可能是个错误?).我一直收到错误

"不允许新事务,因为会话中还有其他线程在运行"

基本上,此错误告诉您在db阅读器仍在读取记录时尝试保存更改.

最终我通过(我认为是一个长镜头)解决了这个问题并增加ToArray()了实现IEnumerable<long>......

那么 - 底线 - 我应该期望IEnumerableEF的结果包含尚未实现的结果吗?如果是,那么有没有办法知道一个IEnumerable是否已实现?

如果这是'duhhh'问题之一,感谢并道歉...... :)

ienumerable frameworks entity entity-framework iqueryable

23
推荐指数
2
解决办法
2万
查看次数

导入存储过程后无法编译项目

将存储过程导入我的datamodel后,项目停止编译.

它一直给我错误:

The best overloaded method match for 
'System.Data.Entity.Core.Objects.ObjectContext.ExecuteFunction<TicketDataModel.sp_get_orphanjobgrades1_Result>
(string, params System.Data.Entity.Core.Objects.ObjectParameter[])' 
has some invalid arguments  C:\Users\nikolaev\Documents\MySoft\TicketManager-06 11 2013\TicketManager\TicketDataModel\TicketDataModel\TicketEntities.Context.cs 105 20  TicketDataModel
Run Code Online (Sandbox Code Playgroud)

`Argument 3: cannot convert from 'System.Data.Objects.ObjectParameter' to 
'System.Data.Entity.Core.Objects.ObjectParameter'   
 C:\Users\nikolaev\Documents\MySoft\TicketManager-06 11 2013\TicketManager\TicketDataModel\TicketDataModel\TicketEntities.Context.cs    79  143 TicketDataModel`
Run Code Online (Sandbox Code Playgroud)

代码context.cs如下:

public virtual ObjectResult<sp_get_orphanjobgrades1_Result> sp_get_orphanjobgrades1(Nullable<System.DateTime> start_date, Nullable<System.DateTime> end_date)
{
            var start_dateParameter = start_date.HasValue ?
                new ObjectParameter("start_date", start_date) :
                new ObjectParameter("start_date", typeof(System.DateTime));

            var end_dateParameter = end_date.HasValue ?
                new ObjectParameter("end_date", end_date) :
                new ObjectParameter("end_date", typeof(System.DateTime));

            return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<sp_get_orphanjobgrades1_Result>("sp_get_orphanjobgrades1", start_dateParameter, end_dateParameter);
}
Run Code Online (Sandbox Code Playgroud)

我读到这可能是因为EF 6并且需要为VS 2012下载VS …

stored-procedures entity-framework

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

将断开连接的对象附加到NHibernate会话; 最佳实践?

我的存储库在UnitOfWork模型中工作; 所有操作,无论是检索还是持久性,都必须在IDisposable UnitOfWork令牌对象的范围内执行,后者在后面与Session执行请求的工作相关联.所以,基本模式是:

using (var uow = repo.BeginUnitOfWork())
{
   try
   {
      //DB operations here; all repo methods require passing in uow.
      ...
      repo.CommitUnitOfWork(uow);
   }
   catch(Exception)
   {
      repo.RollbackUnitOfWork(uow);
      throw;
   }
}
Run Code Online (Sandbox Code Playgroud)

我还实现了一些包装器方法,允许您指定将在此框架中执行的lambda或委托,从而减少每次都需要实现所有这些脚手架的需要.

我遇到的问题是使用这个模型,代码必须"知道"用户需要什么,并NHUtil.Initialize()在内部使用它来急切加载它UnitOfWork.一旦UOW被放置在使用块的末尾,与any关联的Session PersistentBags就会关闭,因此无法对它们进行评估.由于急切加载所有事情并不总是可行的,并且有点破坏了延迟加载ORM的目的,我正在实现一种Attach()方法.

这是问题; 在没有内置ISession.Attach()方法的情况下,我看到有三种方法建议将对象与新的Session相关联.完成工作的最佳做​​法是哪一项?

A:

if(!Session.Contains(domainObject))
    Session.Update(domainObject);
Run Code Online (Sandbox Code Playgroud)

B:

Session.Merge(domainObject);
Run Code Online (Sandbox Code Playgroud)

C:

Session.Lock(domainObject, LockMode.None);
Run Code Online (Sandbox Code Playgroud)

c# nhibernate

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

EF代码优先为一个DbSet的PluralizingTableNameConvention

如何PluralizingTableNameConvention仅针对单个表/ DbSet 切换此约定?至于我可以告诉大家,我只能做到这一切DbSets对于一个给定DbContext

c# entity-framework-4 entity-framework-4.1

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

文本转换和查找实体复数(集合)

如果我有.tt模板,我可以使用entity.Name来写出实体的名称,例如:

foreach (EntityType entity in ItemCollection.GetItems<EntityType>().OrderBy(e => e.Name))
{;
    WriteLine(entity.Name); 
}
Run Code Online (Sandbox Code Playgroud)

使用正常转换或T4,如何写出实体集的实际名称?(例如,对于Person,它可能是人物 - 但也许我将其更改为设计师中的People,所以我想要那样做).

谢谢!

理查德

css t4 entity-framework entity-framework-4

13
推荐指数
2
解决办法
2217
查看次数

无法从使用mvc3中推断出类型参数

我试图使用扩展方法的强类型视图

<% using (Html.BeginForm()) { %>
    <%: Html.ValidationSummary(true) %>
    <fieldset>
        <legend>MyUsageViewModel</legend>

        <div class="editor-label">
            <%= Html.LabelFor(model => model.test) %>
        </div>   
                              <p>
            <input type="submit" value="Save" />
        </p>
    </fieldset>
<% } %>
    <div>
    <%: Html.ActionLink("Back to List", "Index") %>
</div>
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

无法从用法中推断出方法'System.Web.Mvc.Html.LabelExtensions.LabelFor(System.Web.Mvc.HtmlHelper,System.Linq.Expressions.Expression>)'的类型参数.尝试显式指定类型参数.

帮助将不胜感激

c# asp.net-mvc-3

9
推荐指数
1
解决办法
3409
查看次数

实体框架4.1 - 使用过滤器覆盖实体(DBSet)

我正在尝试做一些应该相对简单的事情,但我只是不知道如何构建它.

我有一个Generated Entity,我想通过添加Linq Where语句来覆盖它.

以下是Context的部分内容:

public partial class MyEntities: DbContext
{
    public MyEntities()
        : base("name=MyEntities")
    {
    }    
    public DbSet<Assignee> Assignees { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我创建了MyEntities的新部分并尝试了以下内容

public override DbSet<Assignee> Assignees 
{
    get
    {
        return this.Assignees.Where(z => z.IsActive == true);
    }
    set; 
}
Run Code Online (Sandbox Code Playgroud)

但这会引发歧义错误(很明显).

我怎么能做到这一点?

谢谢

c# entity-framework ef-code-first entity-framework-4.1

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