我首先在我的网站中使用 Entity Frame work 5 代码。一切都很好,我一直在使用
更新数据库-详细
然而,用新数据或新结构和模型更新数据库;update-database 突然停止工作,它不再跟踪模型和新表中的更改。
我在互联网上搜索过,有人说我必须删除数据库上下文并重新创建它才能使其工作。我不能这样做,项目有点大,如果我删除数据库上下文,将影响超过 4k 行。
我使用的是第三次更新的 Visual Studio 2012,所以更新也不是解决方案。
有什么建议。
我需要将其中一个表上主键的数据类型从 int 更改为字符串(我没有说我想要...)。迁移生成以下代码:
AlterColumn("dbo.Venues", "ID", c => c.String(nullable: false, maxLength: 128));
Run Code Online (Sandbox Code Playgroud)
这会导致 SQL Server 抱怨数据类型必须是 int、bigint 等,因为该列是标识列。我添加了以下内容,但似乎没有效果:
AlterColumn("dbo.Venues", "ID", c => c.Int(identity:false));
Run Code Online (Sandbox Code Playgroud)
问题:如何进行迁移以将数据类型从 int 更改为 string?
以下可能与我的问题有关,但不一定:迁移生成的唯一代码是上面显示的第一个 AlterColumn。当以本机生成方式运行时,迁移导致 SQL Server 抱怨它无法更改列,因为存在依赖关系。事实上,唯一的依赖是它是一个 PK(没有表将它引用为 FK)。我将迁移修改为如下所示,现在我收到了如上所示的数据类型错误。
DropPrimaryKey("dbo.Venues");
AlterColumn("dbo.Venues", "ID", c => c.Int(identity:false));
AlterColumn("dbo.Venues", "ID", c => c.String(nullable: false, maxLength: 128));
AddPrimaryKey("dbo.Venues", "ID");
Run Code Online (Sandbox Code Playgroud) 我使用 C# 使用“从数据库生成”生成了数据库模型。POCO 类和上下文是使用 T4 模板生成的。一切工作正常,应用程序能够编辑、插入等,但我无法覆盖实体类中的 SaveChanges 方法。我需要这样做来添加业务逻辑。这是上下文类:
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated from a template.
//
// Manual changes to this file may cause unexpected behavior in your application.
// Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace WebApplication1
{
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
public partial class IInvoiceEntities2 : DbContext
{
public IInvoiceEntities2 ()
: base("name=IInvoiceEntities2 ")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{ …Run Code Online (Sandbox Code Playgroud) 我正在使用来自 (localdb)\V11.0 服务器的数据库,并且在使用来自 VS2013 的 IIS express 时能够成功连接,但是在 LocalIIS 中部署时,它给了我以下错误 -
与 SQL Server 建立连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。
为了解决这个问题,我更新applicationHost.config了如下文件
<add name="DefaultAppPool">
<processModel identityType="ApplicationPoolIdentity" loadUserProfile="true" setProfileEnvironment="true" />
</add>
Run Code Online (Sandbox Code Playgroud)
现在,虽然数据库没有连接,但它显示了一个主页,但所有数据驱动的下拉值都是空的。我也尝试更改Application pool为LocalSystem但网站无法连接数据库。是否有我需要调查的特定领域?
在尝试使用实体框架检索数据并分配给我的自定义类 Customer 时,我不断收到以下错误消息
无法将源类型“system.nullable”转换为目标类型“int”
CustomerNumber 和 Route 的数据类型为 Int32,并且数据库中的字段允许空值
select new Customer()
{
AccountListId = j.cost1,
Csr = j.cost2,
CustomerName = j.cost3,
Address = j.cost4,
Telephone = j.cost5,
Contact = j.cost6,
CustomerNumber = j.cost7,
Branch = j.cost8,
Route = j.cost9,
}).ToList<Customer>();
Run Code Online (Sandbox Code Playgroud)
我该如何处理?
我使用 EF 开发框架。我想获取实体的所有被忽略的属性来构建一些特殊查询。我该怎么做?
public class Customer
{
public int Id { get; set; }
public DateTime BirthDate { get; set; }
public int Age { get; set; }
}
public class CustomerContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Customer>().Ignore(customer => customer.Age);
base.OnModelCreating(modelBuilder);
}
public DbSet<Customer> Customers { get; set; }
}
public static class DbContextExtensions
{
public static List<string> GetIgnoredProperties(this DbContext context, string entityTypeName)
{
// ???
}
}
Run Code Online (Sandbox Code Playgroud) c# entity-framework ef-code-first entity-framework-5 entity-framework-6
再会,
我有一个像下面这样的模型类
public class EmployeeModel
{
[Key]
public int employeeId{get;set;}
public string Fullname {get;set;}
public string Address{get;set;}
public ICollection<PaymentModel> Payments {get;set;}
}
public class PaymentModel
{
[Key]
public int PaymentId{get; set;}
public int employeeId{get; set;}
public decimal PaymentAmount{get; set;}
public int IsPosted {get; set;}
public virtual EmployeeModel Employee {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我只想使用 linq 查询员工列表及其付款列表。所以我这样编码:
dbcontext db = new dbcontext();
var listing = from d in db.Employees
.include("Payments")
select d;
Run Code Online (Sandbox Code Playgroud)
此列表显示所有员工及其所有付款。但我需要过滤 IsPosted = 1 的每个员工付款
所以作为最初的答案,我会做这个代码;
dbcontext db = new dbcontext(); …Run Code Online (Sandbox Code Playgroud) 我正在使用 EF 5(不是 6)。我有一个低于类的对象,它在使用 EF 的数据库中。
public class Student
{
public string Name { get; set; }
public int Age { get; set; }
public DateTime DOB { get; set;}
}
Run Code Online (Sandbox Code Playgroud)
稍后的,
我收到了对同一对象/记录进行更新的请求。
但是在进行更新调用之前,我想交叉比较属性是否实际更改,因为我可能会获得相同的更新记录,因此不想进行盲目更新。
var student = _context.Students.select(x =>x.Name == "").first();
student.name = "";
student.age = "";
student.DOB = "";
_context.Entry(student).State = EntityState.Modified;
_context.saveChanges();
Run Code Online (Sandbox Code Playgroud)
EF 是否为我提供了一些内置方法?
或者,我需要一个一个地交叉比较每个属性并决定?我可以有20个属性...
请问有什么想法吗?
我使用的是.net5.0 EF
我有一个 AppUser 类并将其扩展为 IdentityUser
public class AppUser : IdentityUser
{
}
Run Code Online (Sandbox Code Playgroud)
我正在使用命令生成 EF 迁移
dotnet ef migrations add "myMessage" -p Persistence -s API
我已经删除了所有以前的迁移文件,所以这是一个新的迁移。
我也删除了数据库。
我能够在 sqlLite 中成功生成新数据库。
但是当我尝试在生产/测试服务器 SQL 中执行相同操作时,它给了我以下问题。
fail: Microsoft.EntityFrameworkCore.Database.Command[20102]
Failed executing DbCommand (38ms) [Parameters=[], CommandType='Text', CommandTimeout='60']
CREATE TABLE [AspNetRoles] (
[Id] TEXT NOT NULL,
[Name] TEXT NULL,
[NormalizedName] TEXT NULL,
[ConcurrencyStamp] TEXT NULL,
CONSTRAINT [PK_AspNetRoles] PRIMARY KEY ([Id])
);
fail: API.Program[0]
An error occured during migration
Microsoft.Data.SqlClient.SqlException (0x80131904): Column 'Id' in table 'AspNetRoles' is …Run Code Online (Sandbox Code Playgroud) 我正在开发一个Windows应用程序,我需要在网格中显示对象及其子项列表.因此用户可以修改从实体框架中检索的实体.
在更新db中的对象时,看起来需要从db检索对象并分配新值.这可能会导致性能问题.有没有解决这个问题?
public class Vehicle
{
public Vehicle()
{
this.Fillups = new List<FillupEntry>();
this.Reminders = new List<Reminder>();
}
public int VehicleId { get; set; }
public int UserId { get; set; }
public string Name { get; set; }
public string ModelName { get; set; }
public ICollection<FillupEntry> Fillups { get; set; }
public ICollection<Reminder> Reminders { get; set; }
}
public void Update(Vehicle updatedVehicle)
{
Vehicle vehicleToUpdate =
this.GetDbSet<Vehicle>()
.Where(v => v.VehicleId == updatedVehicle.VehicleId)
.First();
vehicleToUpdate.Name = …Run Code Online (Sandbox Code Playgroud)