Tag: code first

Code First与Database First

我基于现有数据库创建了一个entity framework模型,然后从模型中生成了POCO实体。 我的web.config中的连接字符串不是entity framework,它只是标准连接字符串(它缺少CSDL,SSDL,MSL引用)。 我可以编译我的应用程序,但是当我运行时,我收到此错误: 如果在Code First模式下使用,使用T4模板为Database First和Model First开发生成的代码可能无法正常工作。 要继续使用Database First或Model First,请确保在执行应用程序的配置文件中指定了Entity Framework连接字符串。 要使用从Database First或Model First生成的这些类,使用Code First添加任何其他配置,使用属性或DbModelBuilder API,然后删除引发此exception的代码 我的问题是,在我的代码中,它实现了POCO来自自动生成,我怎样才能让它像Code First一样? 我不想在我的连接字符串中引用CSDL等。

在EF Code First中过滤导航属性

我在EF中使用Code First。 假设我有两个实体: public class Farm { …. public virtual ICollection Fruits {get; set;} } public class Fruit { … } 我的DbContext是这样的: public class MyDbContext : DbSet { …. private DbSet FarmSet{get; set;} public IQueryable Farms { get { return (from farm in FarmSet where farm.owner == myowner select farm); } } } 我这样做,以便每个用户只能看到他的农场,我不必调用每个查询的位置到数据库。 现在,我想过滤掉一个农场的所有水果,我尝试了这个(在Farm类中): […]

在entity framework4.1(CodeFirst)中更新对子对象的引用

我正在尝试使用EntityFramework 4.1(CodeFirst)更新我之前保存的对象 Job类具有以下属性…… public class Job { [key] public int Id { get; set; } public string Title { get; set; } public Project Project { get; set; } public JobType JobType { get; set; } public string Description { get; set; } } 初始创建工作正常,但更新只提交对字符串的更改。 如果我将子对象,例如JobType属性从JobTypeA更改为JobTypeB ,则不会提交更改… 我不打算对JobType进行更改 – 仅限于Job。 using (var context = new […]

EF Code First – 全局设置nvarchar上的varchar映射

我有一个简单的问题,但我一直无法找到答案。 我正在使用EF4 CTP-5 Code First Model和手工生成的POCO。 它在生成的SQL中处理字符串比较 WHERE N’Value’ = Object.Property 我知道我可以使用以下方法覆盖此function: [Column(TypeName = “varchar”)] public string Property {get;set;} 这解决了该单个事件的问题,并正确生成SQL为: WHERE ‘Value’ = Object.Property 但是,我正在处理一个非常大的域模型并遍历每个字符串字段并设置TypeName =“varchar”将非常非常繁琐。 我想指定EF应该在整个板上看到字符串为varchar,因为这是该数据库中的标准,nvarchar是例外情况。 想要纠正这个问题的推理是查询执行效率。 varchar和nvarchar之间的比较在SQL Server 2k5中是非常低效的,其中varchar到varchar比较几乎立即执行。

如何更新在DbContext之外修改的实体?

如果实体在DbContext之外被更改(是一个分离的实体),我在更新实体方面遇到了一个小问题。 如果我附加修改后的实体,则其状态不会被修改。 我的代码如下所示: var specificationToSave = GetSpecificationFromTmpStore(userSessionGuid); using (var context = DataContextFactory.GetDataContext()) { // this works for update, if I change the values inside the context while debugging // but it breaks with new entities context.Specifications.Attach(specificationToSave); // this works for insert new entities, modified entities will be saved as new entities context.Specifications.Add((specificationToSave);) context.SaveChanges(); } 我知道NHibernate,它的方法是SaveOrUpdate。 […]

使用entity framework加载嵌套实体/集合

我试图在一次调用中急切地加载所有相关实体或实体集合。 我的实体看起来像: Class Person { public virtual long Id { get; set; } public virtual string FirstName { get; set; } public virtual string LastName { get; set; } } Class Employee { public virtual long Id { get; set; } public DateTime AppointmentDate { get; set; } public virtual ICollection Titles { get; set; […]

Fluent API,Entity Framework Core 2.0中的多对多

我使用EF Core 2.0,Code first和Fluent API搜索stackoverflow以获得生成多对多关系的正确解决方案。 一个简单的场景是: public class Person { public Person() { Clubs = new HashSet(); } public int PersonId { get; set; } public virtual ICollection Clubs { get; set; } } public class Club { public Club() { Persons = new HashSet(); } public int ClubId { get; set; } public virtual […]

首先了解entity framework代码中的ForeignKey属性

有关背景信息,请参阅以下post: entity framework一到零或一个没有导航属性的关系 我一直认为ForeignKey用于显示类中哪个属性持有确定导航属性的ForeignKey,例如 public class MemberDataSet { [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int Id { get; set; } public int? DeferredDataId { get; set; } [ForeignKey(“DeferredDataId”)] public virtual DeferredData DeferredData { get; set; } } 但是,我在链接的post上发现这是不对的,因为DeferredData的主键被称为Id我实际需要: public class MemberDataSet { [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int Id { get; set; } public int? DeferredDataId { get; set; } […]