标签: entity-framework-4

需要帮助找出返回类型

这是方法:

public IEnumerable<???> GetAllSiteVisits()
{
    var visits =
        _db.STEWARDSHIP
           .OrderByDescending(r => r.VISIT_DATE)
           .Select(r => new
               {
                   id = r.STEWARDSHIP_ID,
                   name = r.SITE.SITE_NAME,
                   visit_date = r.VISIT_DATE,
                   visit_type = r.VISIT_TYPE_VAL.VISIT_TYPE_DESC
               });
    return visits;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Entity Framework 4.2.

所以问题在于找出返回类型.如果我只是直接从数据库表中使用信息,我会返回,IEnumerable<STEWARDSHIP>但由于我只选择某些字段,我不明白返回类型是什么.

.net c# linq entity-framework-4

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

强类型包括不可用

我已从EF 4.0升级到EF 4.2

我的上下文继承自ObjectContext.

强类型Include方法(在结果中包含链接的实体)在我的实体集(继承自ObjectSet)上不可用.

为什么?

c# linq-to-entities entity-framework entity-framework-4 entity-framework-4.1

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

实体框架代码首先忽略的复杂类型

以拉迪斯拉夫的回答为基础

实体框架代码优先和原始类型的集合

我正在尝试创建一个包装器类型EfObservableCollection<T>,ObservableCollection<T>它有一个额外的帮助器属性来简化持久性(当然这个解决方案有权衡,但它对我的域来说似乎是可行的).

但是,EfObservableCollection<T>EF似乎忽略了类型的属性.没有在数据库中创建适当的列.猜测实现IEnumerable<T>可能会触发EF忽略该类型,我注意到该实现没有改变行为.

我在这里错过了什么?

实体类

public class A
{
    [DataMember]
    public long Id { get; set; }

    [DataMember]
    public string Text { get; set; }

    // Tags is not persisted
    [DataMember]
    public EfObservableCollection<string> Tags { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

包装类

[ComplexType]
public class EfObservableCollection<T> : IEnumerable<T>
{
    const string VALUE_SEPARATOR = "\x8"; // Backspace character.  Unlikely to be actually entered by a user.  Assumes ASCII or UTF-8.
    readonly string[] VALUE_SEPARATORS = …
Run Code Online (Sandbox Code Playgroud)

entity-framework-4 ef-code-first

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

如何在c#中的codefirst技术中避免使用Linq with EF进行SQL注入

我使用asp.net mvc 3与WCF与EF 4.1与Sql Azure.我正在为我的应用程序构建搜索引擎.并使用动态Linq来构建查询.我想在这种情况下避免使用sql注入.同样的最佳做法是什么?在这种情况下我应该采取什么预防措施?

sql sql-injection azure entity-framework-4 asp.net-mvc-3

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

将存储过程结果转换为模型对象

我有一个存储过程在我的asp.net mvc3应用程序中使用Entity Framework:

CREATE PROCEDURE dbo.MinMax
AS

DECLARE @T1 TABLE(MinColorsId int,MAXColorsId int)
INSERT @T1 
select MIN(ColorsId) as MinColorsId,MAX(ColorsId) as MAXColorsId
from DiamondInfoes 
SELECT * FROM @T1
RETURN
Run Code Online (Sandbox Code Playgroud)

在我的模型中,我有与过程表结果相同的属性名称:

public class colorModel
{
    [Display(Name = "MinColorsId")]
    public float MinColorsId { get; set; }

    [Display(Name = "MaxColorsId")]
    public float MaxColorsId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在控制器中我运行存储过程:

private _ModelContainer m_db = new _ModelContainer();
var minmax = m_db.MinMax();
Run Code Online (Sandbox Code Playgroud)

我想设置包含程序结果colorModelminmax那个?(简而言之,我有很多属性...)

c# sql entity-framework entity-framework-4

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

修改Entity Framework中实体的属性会导致验证错误

我试图简单地加载一个实体,修改一个属性,然后将其保存回数据库.

var db = new NewsletterContext();
var newsletter  = db.Newsletters.Find(x => x.ID==newsletterID); 
newsletter.SomeProperty = 5;
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

这会导致验证错误,因为新闻稿对象上有一些属性是必需的,当我这样做时显然没有加载Find().

我可以使用Include()for每个必需的属性来解决这个问题,然后是Where():

var db = new NewsletterContext();
var newsletter  = db.Newsletters.Include(x => x.RequiredProp1)
                    .Include(x => x.RequiredProp2).Include(x => x.RequiredProp3)
                    .Where(x => x.ID==newsletterID)
                    .FirstOrDefault(); 
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

这不是一个非常优雅的解决方案,如果我向Newsletter对象添加更多必需属性,它将会中断.

有更好的解决方案吗?

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

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

c#抽象类泛型属性

请考虑以下代码:

public abstract class RepositoryBase<T> where T : class
{
    #region Members

    private MyContext dataContext;
    private readonly IDbSet<T> dbset;

    #endregion

    protected RepositoryBase(IDatabaseFactory databaseFactory)
    {
        DatabaseFactory = databaseFactory;
        dbset = DataContext.Set<T>();
    }

    protected IDatabaseFactory DatabaseFactory
    {
        get; private set;
    }

    protected MyContext DataContext
    {
        get { return dataContext ?? (dataContext = DatabaseFactory.Get()); }
    }

    public virtual void Delete(T entity)
    {
        dbset.Remove(entity);
    }
Run Code Online (Sandbox Code Playgroud)

我想用下面的方法替换Delete方法,因为我更愿意在我的对象中简单地将Deleted字段设置为true以指示它被删除,而不是真正删除它.

    public virtual void Delete(T entity)
    {
        entity.Deleted = true;
        dbset.Attach(entity);
        dataContext.Entry(entity).State = EntityState.Modified;
    }
Run Code Online (Sandbox Code Playgroud)

我正在使用POCO实体,并且所有这些实体都存在Deleted属性.但是,在上面的代码中,实体的类型为T,并且T"不知道"它可以表示的所有对象中都有Deleted属性.解决这个问题最优雅的方法是什么?

顺便说一句,我想在我的抽象类中以类似的方式访问其他字段(DateCreated,CreatedBy,DateModified和ModifiedBy).

更新:我尝试了接口和Abstract类解决方案,起初看起来很不错,但是在编译时两种情况下我都收到以下错误消息: …

c# abstract-class poco entity-framework-4

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

LINQ - 将数字存储为字符串

我有以下数据:

PK    OrderNumber      USERDEFFIELD
1     0001             10
2     0001             25
3     0002             20
4     0002             22
5     0002             NULL
6     0003             ABC123
Run Code Online (Sandbox Code Playgroud)

UserDefField列在数据库中是VARCHAR类型.使用LINQ,我如何获得每个订单的SUM(UserDefField)?UserDefField的NULL和非数字值将被视为零.我想要得到的结果:

OrderNumber  TotalQty
0001         35
0002         42
0003          0
Run Code Online (Sandbox Code Playgroud)

如果UserDefField是严格可以为空的数字字段,我知道我会在foreach循环中执行此操作:

 TotalQtyForThisOrder = orders.Sum(w => w.UserDefField ?? 0 );
Run Code Online (Sandbox Code Playgroud)

但是对于字符串字段,应该做什么?非常感谢你的帮助.

c# linq linq-to-entities entity-framework-4

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

学习MVC,Linq,Entity Framework的最佳资源

我很快就会加入一个他们正在从事上述技术工作的新团队.我来自asp.net背景,并没有在这些技术任何工作.请建议好的资源,以及哪一个开始学习.

谢谢

linq entity-framework entity-framework-4 asp.net-mvc-4

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

没有无限循环的堆栈溢出异常(据我所知)

我有一个堆栈溢出错误,我很确定我没有任何类型的无限递归(至少我已经盯着错误几个小时了,我无法想象它的无限循环).

这是代码:

    public decimal? Amount
    {
        get
        {
            if (!string.IsNullOrEmpty(_savedWork.Amount))
                return decimal.Parse(_savedWork.Amount);
            else
                return null;
        }
        set
        {
            if (value.HasValue)
            {
                _savedWork.Amount = value.Value.ToString();
                Percent = null;
            }
            else
                _savedWork.Amount = "";
            OnPropertyChanged("Amount");
        }
    }
Run Code Online (Sandbox Code Playgroud)

#Note我有一个以可以为空的十进制字符串的字符串,这就是我转换它的原因.请不要让我说明为什么我这样做.

这条线savedWork.Amount = value.Value.ToString()是我得到错误的地方.

基本上我认为我的堆栈太小(或者我认为我的代码太大了).我基本上运行这个代码两次,它在一种形式下工作,但是当我制作另一种形式并将其放在那里时,我不认为这两种形式之间的区别在于倾斜堆栈.

有没有办法确定我做错了什么?我想知道代码的哪些部分占用太多或持续时间太长等.

我已经做了一些关于堆栈/堆如何工作的研究,我知道PerfMon.exe,但据我所知它只适用于堆.是否有类似的工具,我可以用于我的程序正在运行的堆栈?

我发现这个帖子大约有两个名为windbgcdb的工具,但我找不到很多关于如何安装/使用它们的信息.这些工具是正确的方法吗?

或者,如果存在无限循环或某些事情会很棒.

编辑

这里是Amount属性请求的代码(由EntityFramework自动生成)正如我在评论中所说,步骤甚至没有到达这里.我确实认为我的堆栈限制正在达到.

  public global::System.String Amount
    {
        get
        {
            return _Amount;
        }
        set
        {
            OnAmountChanging(value);
            ReportPropertyChanging("Amount");
            _Amount = StructuralObject.SetValidValue(value, true);
            ReportPropertyChanged("Amount");
            OnAmountChanged();
        }
    }
Run Code Online (Sandbox Code Playgroud)

最终编辑

好的,Meta-Knight的回答告诉我,我确实有一个无限循环.我有一个事件处理程序订阅了DisplayTypeOfInvestment的PropertyChanged事件(Amount属性所属的类).处理程序看起来像这样: …

c# stack-overflow wpf xaml entity-framework-4

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