标签: entity-framework-5

如何在winforms中使用EF进行双向数据绑定?

我是新编码的人.现在我要告诉你我目前的情况以及我想去的地方.希望你会帮忙.

我正在使用EF5.0数据库第一种方法,我希望能够使用gridviews列出和更新数据库值.

目前我正在绑定我的数据,如下所示:

  pehlivan_kabametrajEntities ctx = new pehlivan_kabametrajEntities();
        var result = from k in ctx.Kolons
                     select k;
        dataGridView1.DataSource = result.ToList();
Run Code Online (Sandbox Code Playgroud)

此代码完美地列出了我的数据.但是对我的需求来说是错误的还是不够的.因为我希望能够在gridview上编辑我的数据.请告诉我有什么问题,我应该怎么做.至少链接的一些文件会让我到达我想要的目的地点,这将是很棒的.谢谢.

c# entity-framework winforms entity-framework-5

5
推荐指数
1
解决办法
3201
查看次数

如何首先定义嵌套识别关系实体框架代码

我现在首先在一个简单的测试应用程序中使用EF5代码来测试各种功能.我已经在两个代表一对多链接的实体之间定义了"识别关系".在这里,我定义了一个具有许多子Photo实体的PhotoCollection;

public class PhotoCollection
{
    public int Id { get; set; }
    public virtual ISet<Photo> Photos { get; private set; }

    public PhotoCollection()
    {
        Photos = new HashSet<Photo>();
    }
}

public class Photo
{
    [Key, ForeignKey("Parent"), Column(Order = 1)]
    public int PhotoCollectionId { get; set; }

    [Key, Column(Order = 2)]
    public int PhotoId { get; set; }

    public virtual PhotoCollection Parent { get; set; }


    [Required, MaxLength(200)]
    public string FilePath { get; set; }

    public Photo()
    {
    }

}
Run Code Online (Sandbox Code Playgroud)

我的OnModelCreating实现包括; …

entity-relationship one-to-many ef-code-first entity-framework-5

5
推荐指数
1
解决办法
3466
查看次数

无法使ApplyCurrentValues(Entity)在Entity Framework 5中工作

同志们,任何人都可以帮助我,实体框架5似乎没有ApplyCurrentValues()方法.是否有另一种方法来更新实体框架v5中的数据库对象.这是我想要做的

odc.Accounts.Attach(new Account { AccountID = account.AccountID });
  odc.Accounts.ApplyCurrentValues(account);
  odc.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

但是我在ApplyCurrentValues()行中遇到了编译错误

c# .net-4.5 entity-framework-5

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

实体框架5:如何外连接表值函数

我试图在我的LINQ查询中外连接一个带有内联表值函数的表,但是我在运行时遇到了一个查询编译错误:

"查询尝试通过嵌套查询调用'OuterApply',但'OuterApply'没有相应的密钥."

我的linq语句如下所示:

     var testQuery = (from accountBase in ViewContext.AccountBases

                         join advisorConcatRaw in ViewContext.UFN_AccountAdvisorsConcatenated_Get()
                                on accountBase.AccountId equals advisorConcatRaw.AccountId into advisorConcatOuter
                         from advisorConcat in advisorConcatOuter.DefaultIfEmpty()

                         select new
                         {
                             accountBase.AccountId,
                             advisorConcat.Advisors
                         }).ToList();
Run Code Online (Sandbox Code Playgroud)

功能定义如下:

CREATE FUNCTION dbo.UFN_AccountAdvisorsConcatenated_Get()
RETURNS TABLE
AS
RETURN
    SELECT  AP.AccountId,
            LEFT(AP.Advisors, LEN(AP.Advisors) - 1) AS Advisors
      FROM  (   SELECT  DISTINCT 
                        AP.AccountId,
                        (   SELECT  AP2.PropertyValue + ', '
                            FROM    dbo.AccountProperty AP2 WITH (NOLOCK)
                            WHERE   AP2.AccountId = AP.AccountId
                            AND     AP2.AccountPropertyTypeId = 1 -- Advisor 
                            FOR XML PATH('')) AS Advisors
                FROM    dbo.AccountProperty AP …
Run Code Online (Sandbox Code Playgroud)

entity-framework entity-framework-5

5
推荐指数
1
解决办法
1077
查看次数

EntityState.Deleted不起作用,Remove(entity)呢?

在尝试读取记录时,我一直在与EF斗争,然后在同一个事务中删除这些记录.我最初使用的是EntityState.Deleted方法,它会产生错误:

操作失败:无法更改关系,因为一个或多个外键属性不可为空.当对关系进行更改时,相关的外键属性将设置为空值.如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象.

但是,如果我将它改为我在下面,使用.Remove(),那么一切都很好.

  1. 有什么区别和最佳使用时间.Remove()vs .Deleted?
  2. 我怎么能使用.Deleted方法来完成这项工作?我已经尝试创建一个新的上下文实例到我的存储库读取和另一个删除,但后来得到的错误与IEntityTracker无法跟踪多个实例...我也试过.Include在初始读取时加载依赖记录进入EF所以它知道并删除它们.我也尝试过.先读取读取的记录.一切都无济于事.

这是有问题的方法.请注意,我确实有一个使用.Deleted方法的通用存储库,该方法在此方案之前一直很好用(读取然后删除相同的记录.)

//Delete Allocation Need and AllocatedContainers for alloc need id
public ActionConfirmation<int> DeleteAllocRecords(int intFacilityId, AllocNeedSourceTypes needSourceType, int intNeedSourceId)
{
var context = new InventoryMgmtContext();
var repository = new AllocationNeedRepository(context);

//Delete Allocation Need and hence children in Allocated Containers
var srcType = needSourceType.ToString();
List<AllocationNeed> allocNeeds = repository.SearchFor(
    x => x.FacilityId == intFacilityId
    && x.NeedSourceType == srcType
    && x.NeedSourceId == intNeedSourceId
).ToList();

//var deleteRepository = new Repository<AllocationNeed>(); <--tried separate instance of context to delete...no worky.

foreach …
Run Code Online (Sandbox Code Playgroud)

.net c# entity-framework exception-handling entity-framework-5

5
推荐指数
1
解决办法
6911
查看次数

实体框架DB首先:将关联表转换为导航属性

我正在使用Entity Framework Database First,但我想从Code First范例中复制以下行为:

在实体框架代码中,您可以按照以下方式执行操作:

public class Thing
{
    public int ID { get; set; }
    ICollection<Stuff> Stuffs { get; set; }
}

public class Stuff
{
    public int ID { get; set; }
    ICollection<Thing> Things { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

并且数据库将生成和Associative表来表示多对多的关系.

我正在使用Database First和遗留数据库.我引入了实体,它包含了表示两个表之间多对多关系的关联表.

由于关联表作为实体包含在内,因此导航属性如下:

public class Thing
{
    public int ID { get; set; }
    public ICollection<ThingStuff> ThingStuffs { get; set; }
}

public class ThingStuff
{
    public int ThingID { get; set; }
    public int StuffID { …
Run Code Online (Sandbox Code Playgroud)

entity-framework database-first ef-database-first .net-4.5 entity-framework-5

5
推荐指数
1
解决办法
1513
查看次数

实体的IQueryable .Where(属性在本地数组中)

所以我知道iQueryables被翻译成SQL语句,因此无法处理你可能放入where子句的所有可能的方法.

但这就是我要做的事情:

int[] alreadySelectedIds = ...
var subjects = Entities.NewInstance.Subjects.Where(x => Array.IndexOf(alreadySelectedIds, x.Id) == -1).ToList();
Run Code Online (Sandbox Code Playgroud)

阅读下面的帖子,我很高兴EF5能够翻译这个.
获取其键匹配id列表(或数组)的实体
使用LINQ从数组查询Int Ids

但是,我收到此错误:

LINQ to Entities无法识别方法'Int32 IndexOf [Int32](Int32 [],Int32)'方法,并且此方法无法转换为存储表达式.

谷歌搜索这个错误并没有给我太多帮助.

我也试过了

var newSubjects = Entities.NewInstance.Subjects.Where(x => alreadySelectedIds.Contains(x.Id)).ToList();
Run Code Online (Sandbox Code Playgroud)

无法创建类型为"System.Int32 []"的空常量值.在此上下文中仅支持实体类型,枚举类型或基元类型.

List<int> alreadySelectedIds = ...
Run Code Online (Sandbox Code Playgroud)

无法创建类型为"System.Collections.Generic.List`1"的空常量值.在此上下文中仅支持实体类型,枚举类型或基元类型.

我被困住了,我的大脑变得糊涂,超出了任何类型的优雅恢复的可能性.有人可以救我吗?

.net c# linq entity-framework entity-framework-5

5
推荐指数
1
解决办法
2891
查看次数

具有Code First连接字符串的实体框架到远程数据库

我正在使用本地机器(ASP.NET MVC 4应用程序),但现在我想开始使用公司的SQL服务器,所以我需要更改连接字符串以便将我连接到该远程服务器.

设置如下:

  • 我有一个VPN连接,我使用的是IP地址,无法显示确切的IP,所以让我们说 - xxx.xxx.xxx.xxx
  • 我有用户名和密码才能连接到VPN - VPNUsername/VPNPassword
  • 当我Microsoft SQL Server Management Studio用来连接到远程服务器时,我使用与用于连接VPN的相同IP - xxx.xxx.xxx.xxx
  • 我有不同的SQL Server用户名和密码 - SQLUsername/SQLPassword

我有一个现有的连接字符串,我用它连接到我的电脑上的服务器,所以我认为只需改变那里的参数即可:

<add name="ProjectName.DAL.MyDbContext"
     providerName="System.Data.SqlClient"
     connectionString="Data Source=xxx.xxx.xxx.xxx;
     Initial Catalog=DatabaseName;Integrated Security=True;         
     MultipleActiveResultSets=True;
     user id=SQLUsername;password=SQLPassword;App=EntityFramework" />
Run Code Online (Sandbox Code Playgroud)

因此,工作连接字符串并将我连接到本地服务器的更改有两个:

  1. Data Source= xxx.xxx.xxx.xxx - 我正在使用IP.在这里,我想知道IP本身是否足够.我应该使用http://xxx.xxx.xxx.xxx还是IP就可以了?
  2. user id=SQLUsername;pasword=SQLPassword- 我使用相同的用户名和密码Management studio,因为我可以通过提供xxx.xxx.xxx.xxx服务器名称和使用SQLUsername/SQLPassword 成功连接到删除服务器SQL Server Authentincation.

所以要清楚 - 在Management Studio下我连接到远程服务器没有问题.但是,当我将连接字符串更改为我在上面发布的内容时,我的HomeController逻辑非常简单,只是为了检查是否执行了对数据库的调用:

private MyDbContext db = new MyDbContext();

        //
        // GET: /Home/

        public ActionResult Index()
        {
            return View(db.Users.ToList()); …
Run Code Online (Sandbox Code Playgroud)

vpn connection-string entity-framework-5

5
推荐指数
1
解决办法
4181
查看次数

实体框架在视图中选择了太多列

当我对SQL表使用Entity Framework时,它只引用生成的SQL中的必要列:

ctx.Types.Select(rdi => rdi.Name)
Run Code Online (Sandbox Code Playgroud)

SELECT [Extent1].[Name] AS [Name]
FROM [dbo].[Types] AS [Extent1]
Run Code Online (Sandbox Code Playgroud)

但是,如果我对SQL视图进行类似的查询,Entity Framework将生成引用视图中每个列的 SQL :

ViewTypes.Select(rdi => rdi.Name)
Run Code Online (Sandbox Code Playgroud)

SELECT [Extent1].[Name] AS [Name]
FROM (SELECT 
      [ViewTypes].[Name] AS [Name], 
      ... every other column in my view ...
      FROM [dbo].[ViewReferenceDataTypes] AS [ViewReferenceDataTypes]) AS [Extent1]
Run Code Online (Sandbox Code Playgroud)

我确信SQL Server将执行自己的优化,最终忽略它不关心的所有列,但这仍然会导致大量的SQL发送到服务器.(我的实际例子包括一个连接,这导致选择了几个表中的每一列......)

Entity Framework是否有充分理由这样做?有没有办法让它这样做?

c# entity-framework-5

5
推荐指数
1
解决办法
480
查看次数

如何在一天的特定时间追踪糟糕的表现?

我有一个在IIS7上运行的ASP.NET MVC-4,Entity Framework 5应用程序,带有SQL Server 2012数据库.

每天,在7:45到8:15之间,数百名用户执行相同的日常日常任务.而且表现很糟糕.我们到处都是超时的.

所以今天我坐着看几个诊断工具.在SQL Server Profiler上,我看到数百个查询在30秒后超时.我复制了查询并将其放入SQL Sentry中以查看查询计划中发生了什么.30分钟后,查询最终执行,显示了一个完全无懈可击的低效执行计划.索引扫描返回了数千万条记录,这些记录应该通过较早的连接过滤到数十,甚至数百条记录.

与此同时,我正在检查性能监视器以进行其他诊断.CPU正在以20-30%的舒适度巡航,我们有256 GB的RAM,其中大约200个为SQL Server保留,并且不缺乏工作内存.没有重要的数据库锁定,没有死锁.只是可怕,糟糕的表现.

所以后来我尝试运行完全相同的查询.它在大约0.1秒内回来了.查询计划看起来完全不同:一切都是索引搜索,细线和一切.我在SQL事件探查器中捕获的所有其他查询在7:45-8:15之间花费了5秒钟,现在每秒返回0.1秒以下.

我们每天都在同一时间窗口内遇到同样的问题.我该如何解决此问题?我认为在不同时间执行查询时,不同的查询计划可能会有一些线索; 这可能与SQL统计数据有关吗?如果是这样,我们如何解决它?

编辑:我接受了@t_m的建议并部署了一个DMV脚本.现在,我可以确定在查询超时时遵循了什么执行计划,以及它在工作时遵循的计划.

c# iis-7 asp.net-mvc-4 sql-server-2012 entity-framework-5

5
推荐指数
0
解决办法
162
查看次数