标签: entity-framework-6

repository.InsertAsync 总是返回 entity.Id 0

有时我需要Id插入实体。为了实现这一点,我使用:

entity = await _repository.InsertAsync(entity);
Run Code Online (Sandbox Code Playgroud)

有了这个,entity.Id总是 0。因此,我在下面添加了一行。

await CurrentUnitOfWork.SaveChangesAsync();
Run Code Online (Sandbox Code Playgroud)

如果我添加这一行,我可以得到Id. 但是,这种方式对我来说似乎很脏。还有其他方法吗?或者这种方式已经正确?我只是想确定一下。我想知道使用CurrentUnitOfWork不会引起我可能不知道的问题。谢谢你。

c# asp.net entity-framework-6 aspnetboilerplate

0
推荐指数
1
解决办法
938
查看次数

参数值超出范围

看起来 EF 正在将零填充到我试图保存的值,然后引发异常。这是我的代码:为什么值为 10.17 的总小时数字段超出了小数(6,5)值类型的范围以及为什么它用零填充该值?直接使用SQL Server Management Studio保存这个值似乎没有问题,所以看起来更像是EF的问题。

这是来自数据库第一个 .edmx 文件。我尝试过将比例和精度设置为无。两者都没有工作

 var rVal = new Data.FactPayrollHour()
                {
                    BereavementHours = 0.0M,
                    CostCenter = "MyCostCenter",
                    Department = "MyDepartment",
                    EmergencyHours = 0.0M,
                    HomeGroupCode = "MyHomeGroup",
                    PayrollEmployeeId = employees.FirstOrDefault().Id,
                    PayType = "MyPayType",
                    PunchDateKey = dateDims.FirstOrDefault().ID,
                    Schedule = "",
                    ServiceHours = 0.0M,
                    Shift = "",
                    ShortTermHours = 0.0M,
                    TimePolicy = "",
                    TotalHours = 10.17M,
                    UnpaidHours = 0.0M,
                    VacationHours = 0.0M
                };
                db.FactPayrollHours.Add(rVal);
                db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

异常消息是:Parameter value '10.17000' is out of range.

堆栈跟踪:

   at System.Data.SqlClient.TdsParser.TdsExecuteRPC(SqlCommand cmd, …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework-6

0
推荐指数
1
解决办法
6161
查看次数

如何在一个 Razor 页面中访问 2 个 DBContext

在我的 Razor 页面中,我想使用连接到不同数据库的第二个 DBContext。

我有两个 DBContext 连接到两个不同的数据库,它们在同一个应用程序中独立工作正常。DB1 连接到在 Linux 机器上运行的 MS Sql Server,这是主数据库。DB2 连接到 Windows Server 2016 上的 MS Sql Server。我可以为 DB1 中的表创建 CRUD,并且所有功能都正常工作,我可以为 DB2 中的视图创建读取,并且按预期检索数据。在 DB1 中创建新记录时,我想合并 DB2 中的数据。如何在为 DB1 的 DBContext 创建的 Razor 页面 CRUD 中创建/访问 DB2 的 DBContext。我希望这是有道理的。在过去的几天里,我疯狂地尝试谷歌搜索,但未能找到解决方案。

entity-framework razor entity-framework-6 asp.net-core razor-pages

0
推荐指数
1
解决办法
4071
查看次数

需要帮助理解实体框架

我的前任为 HR 编写了一个 Web 应用程序,用于从 HRMS 的 401k 贡献中提取数据。事实证明,他的报告仅在捐款金额为精确金额而不是百分比时才提取追加捐款。他使用实体框架来做到这一点。我是脚本编写者,不是程序员。我知道阿多。我不知道实体框架。

数据库有一个名为 的列EARNED。追赶贡献金额获取代码 D03。追赶贡献百分比获取代码 D03B。该列还有其他几个可能的值:D04、D31、E40 等。不知何故,他的报告仅提取 D03 行。它还需要拉动 D03B 行。

如果我写 SQL,它会是这样的

SELECT * 
FROM [SageHRMS_900].[dbo].[UPCHKD] 
WHERE [EARNDED] = 'D03B' 
   OR [EARNDED] = 'D03'
Run Code Online (Sandbox Code Playgroud)

显然实体框架不使用类似的东西。相反,我看到的只是这样的东西

hrmsEntity hrms = new hrmsEntity(dbConnection);
var detail = hrms.TRP_ConDetail.ToList();

foreach (var line in hrms.TRP_ConDetail.ToList())
{
    fileData += line.Plan + line.RecordID + line.Date + line.SSN + line.Fund + line.LoanNum +
    line.Amount + line.Salary + line.SalaryType + line.ContType + line.StateTax + 
    line.LoanPayType + line.Filler01 + Environment.NewLine;
} …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework entity-framework-6

0
推荐指数
1
解决办法
64
查看次数

如何使用lambda表达式获取linq中的前5条记录

我需要在这个时间戳上获取一列“温度”的前 5 个值,例如“按 desc 选择 tbl_sensors 顺序的前 5 个温度”

我尝试了这样的方法,但不知道如何进入前5名

var sensorsVal = DB.tbl_sensors.OrderByDescending(x => x.CurrentTime).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

c# linq model-view-controller entity-framework-6

-1
推荐指数
1
解决办法
4604
查看次数

实体框架不保存新项目

我有一个奇怪的问题.下面的代码不会保存新LookupGroup对象

LookupGroup lookup = null;

using (var db = new WaybackDbContext())
{
    lookup = db.LookupGroups.SingleOrDefault(x => x.Name.Equals(lookupName, StringComparison.InvariantCultureIgnoreCase));

    if (lookup == null)
    {
        lookup = new LookupGroup
        {
            Name = lookupName
        };
        db.SaveChanges();
    }

}
Run Code Online (Sandbox Code Playgroud)

LookupGroup启动,但它不会被保存,其ID为0.

什么可以阻止它储蓄?

c# entity-framework entity-framework-6

-1
推荐指数
1
解决办法
30
查看次数

WHERE IN子句AS对象实体框架

如果我有一个Company对象:

var companies = db.Companies.Where(...);
Run Code Online (Sandbox Code Playgroud)

和一个UserCompany对象相关的对象one-to-many:

var users = db.Users.Where(...);
Run Code Online (Sandbox Code Playgroud)

我怎样才能达到像这样的标准 select * from users where user.company in (company)

从一些文章中读到,我尝试过类似的东西:

users.Where(x => companies.Contains(x.company))
Run Code Online (Sandbox Code Playgroud)

但似乎不起作用.我错过了什么?

编辑

确切答案:

public PartialViewResult IndexGrid(String search)
{
    var companies = db.Users.Find(User.Identity.GetUserId()).Companies.AsQueryable();
    Guid[] guids = companies.Select(c => c.Id).ToArray();

    if (String.IsNullOrEmpty(search))
        return PartialView("_IndexGrid", db.Set<Quotation>().OrderByDescending(x => x.Code).AsQueryable()
            .Where(x => guids.Contains(x.Company.Id)));
    else
        return PartialView("_IndexGrid", db.Set<Quotation>().OrderByDescending(x => x.Code).AsQueryable()
            .Where(x => guids.Contains(x.Company.Id))
            .Where(x => x.Code.Contains(search)|| x.MasterCustomer.Name.Contains(search)));
}
Run Code Online (Sandbox Code Playgroud)

c# linq entity-framework-6

-1
推荐指数
1
解决办法
77
查看次数

LINQ 表达式无法翻译 - C#

我写了一个简单的查询(问题是当我尝试在Address下面设置时ProductCode):

 var query = _connectDBContext.Products
                            .Join(_context.CustomerRelations,
                                Product => Product.ForeignKeyId,
                                CustomerRelation => CustomerRelation.CompanyId,
                                (Product, CustomerRelation) => new { Product, CustomerRelation })
                            .Select(x => new ProductDto
                            {
                                Title = x.Product.Title,
                                ProductCode = x.Product.Code,
                                Address = Map(x.Product.Addresses.OrderBy(x=> x.CreatedDate).FirstOrDefault()),
                                //Address = new AddressDTO // THIS WORKS BUT LOOKS UGLY :(
                                //{
                                //    Address = x.Product.Addresses.OrderBy(x => x.CreatedDate).FirstOrDefault().Address,
                                //    Country = x.Product.Addresses.OrderBy(x => x.CreatedDate).FirstOrDefault().Country,
                                //    Zip = x.Product.Addresses.OrderBy(x => x.CreatedDate).FirstOrDefault().Zip,
                                //},
                               
                            })
                            .Where(x => x.Id == x.CustomerRelationId);

           // Rest of the …
Run Code Online (Sandbox Code Playgroud)

c# linq entity-framework entity-framework-6

-1
推荐指数
1
解决办法
117
查看次数

无法将类型'System.Collections.Generic.List <System.Collections.Generic.IEnumerable <long >>'隐式转换为<long>'

我在ASP.NET MVC Web应用程序中编写了以下LINQ语句:

List<long> ids = TServers
  .Select(a => a.TVirtualMachines
     .Select(a2 => a2.Technology.ID.Value))
  .ToList();
Run Code Online (Sandbox Code Playgroud)

我想要实现的是做以下事情:

我们有Tservers,它们有一组TVirtualMachines,每个TVirtualMachine都与Technology相关联.我想为Tserver下的所有TVirtualMachine选择Technology.ID.但我上面的代码将返回以下错误:

无法将类型'System.Collections.Generic.List>'隐式转换为'System.Collections.Generic.List'

c# linq asp.net entity-framework entity-framework-6

-3
推荐指数
1
解决办法
714
查看次数

为什么我不能等待'System.Linq.IQueryable

我有以下存储库方法: -

  public  IQueryable<TSet> getAllScanEmailTo()
        {
         return   t.TSets.Where(a=>a.Name.StartsWith("ScanEmail"));

        }
Run Code Online (Sandbox Code Playgroud)

这被称为如下: -

var emailsTo = repository.getAllScanEmailTo().ToList();
Run Code Online (Sandbox Code Playgroud)

现在我试图改变以上使用异步,所以我修改我的存储库方法如下: -

 public async Task<  IQueryable<TSet>> getAllScanEmailTo()
        {
         return  await t.TSets.Where(a=>a.Name.StartsWith("ScanEmail"));

        }
Run Code Online (Sandbox Code Playgroud)

但我得到以下错误: -

Error   1   Cannot await 'System.Linq.IQueryable<Final.Models.TSet>'
Run Code Online (Sandbox Code Playgroud)

c# linq asynchronous entity-framework entity-framework-6

-4
推荐指数
1
解决办法
2370
查看次数