Tag: 代码优先

首先是EF代码 – 复合键

我有一个遗留数据库有两个列,我想将它们映射为1 ID这是可能的 例如 public class Product { public string ProductID {get;set;} public string ShortDescription {get;set;} public string UserName {get;set;} } 然后我的Modelbinder看起来像这样 modelBinder.Entity(). HasKey(p=>p.ProductID) .MapSingle(product => new { colShotDesc = product.ShortDescription, colUser = product.UserName } ).ToTable(“Products”); 我需要的是像映射中的ProductID = ShortDescription + UserName ……因为这两个列共享一个独特的键约束… 不知道这是否有意义,但任何建议都会很棒…请不要问数据库设计=>这就像它是,不应该改变…这就是为什么我认为EF代码优先帮助我(希望交叉手指)…因为它看起来像db没有定义pk只是唯一的键约束… 无论如何……帮助会很棒..

ALTER TABLE DROP COLUMN失败,因为一个或多个对象访问此列

我想这样做: ALTER TABLE CompanyTransactions DROP COLUMN Created 但我明白了: Msg 5074,Level 16,State 1,Line 2对象’DF__CompanyTr__Creat__0CDAE408’依赖于’Created’列。 消息4922,级别16,状态9,行2 ALTER TABLE DROP COLUMN创建失败,因为一个或多个对象访问此列。 这是代码第一表。 某种程度上,迁移已经变得混乱,我试图手动回滚一些变化。 我不知道这是什么: DF__CompanyTr__Creat__0CDAE408

entity framework(代码优先) – 动态构建模型

我有一个类我的域的组件 – “Domains.dll”。 我动态添加到我的DbContext Dbset加载类的程序集。 public class MyContext : DbContext { public MyContext() : base(“DBConnection”){} protected override void OnModelCreating(DbModelBuilder modelBuilder) { Assembly assembly = Assembly.LoadFrom(“Domains.dll”); var entityMethod = typeof(DbModelBuilder).GetMethod(“Entity”); var list = assembly.GetTypes().OrderBy(i => i.GetType().Name); foreach (Type item in list) { entityMethod.MakeGenericMethod(item) .Invoke(modelBuilder, new object[] { }); } } } 接下来,我创建DataBase context.Database.Create(); 这有效但我的域名存在问题。 我有一个父实体的类 public […]

禁用entity framework的默认值生成(代码优先)

我在数据库中有一个不能为null的列,我想将其设置为在数据库中具有默认值。 问题是entity framework似乎自己创建了一个默认值(例如,int => 0),并完全忽略了数据库中的默认值约束。 有没有办法禁用这个entity framework的默认值?

如何指定从实体X到同一目标实体Y的两个导航属性?

考虑一下我有一个Instructor类: public class Instructor { public InstructorTypesEnum Type { get; set; } public virtual ICollection Courses { get; set; } public virtual ICollection CoInstructingCourses { get; set; } } 这里, InstructorTypesEnum有两个值:讲师和辅导员。 所以两个导航属性Courses和CoInstructingCourses应该返回那些不同的课程。 当然,我也很难在Course类中指定相应的属性 public Guid InstructorId { get; set; } public virtual Instructor Instructor { get; set; } public virtual ICollection Coinstructors { get; set; […]

在Code中,INSERT语句与FOREIGN KEY约束冲突

我刚开始使用Code第一种方法来创建数据库。 我有以下3个表格: public partial class AccountHolder { public int AccountHolderId { get; set; } public virtual List Address { get; set; } } public partial class Nominee { public int NomineeId { get; set; } public virtual List Address { get; set; } } public partial class Address { public int AddressId { get; set; […]

entity framework代码First MaxLength和FixedLegth(char vs varchar)

我有一个entity frameworkCodeFirst模型,我从现有的数据库创建,我想使用DataAnnotations以不同的方式装饰一些char和varchar。 char和varchar之间的区别在于Char具有固定长度并且varchar具有可变长度。 对于Varchar我正在使用[Maxlength(length)]对于char这是正确的方法还是有更好的方法来定义类中的字符串属性被映射为数据库中的char?

EntityFramework Mutli-Table多对多

我正在使用EF4.1 Code First,我正在尝试创建一些需要链接表的多对多关系表。 请参阅下面的小代码片段: class Event { int EventId { get; set; } ICollection Contacts { get; set; } } class Contact { int ContactId { get; set; } ICollection Relations { get; set; } } class Relation { int RelationId { get; set; } string Name { get; set; } } 因此,Contacts对象可以有许多不同类型的关系,例如“Mother”,“Father”,“Brother”等。 我需要跟踪联系人参加的某种活动,但我想知道他是如何与举办活动的人联系的。 例如,他是Eventer的兄弟,父亲还是丈夫? […]

entity framework代码优先执行标量值函数

如何首先使用代码执行标量函数? 下面是我尝试但只返回查询本身,而不是返回值。 using (var dbContext = new FTTRContext()) { queryResult = dbContext.Database.SqlQuery(“SELECT [dbo].[ufnGetTotalUsers] (GETDATE())”).ToString(); }

entity framework上的懒惰与急切加载性能

所以我的DbContext上有以下模型类: 每次我渲染一个LoanApplication对象列表时,我都会这样做: var context = new MyContext(); var applications = context.LoanApplications.Where(d => d.PropertyThatIWantToFilter = localVariable); 这将返回一个IQueryable,然后我在我的控制器方法调用中转换为这样的ViewModel: var vm = applications.Select(d => new LoanApplicationViewModel(d)); 在LoanApplicationViewModel构造函数内部,我接受实体对象并执行相应的映射。 问题在于,由于Solicitors集合是一个导航属性,因此每次实例化新的视图模型时都会对数据库进行调用。 每个应用程序的平均律师数量是两个,这意味着如果我呈现一个列出最后10个应用程序的表,那么该应用程序将大约18-20次访问数据库。 我认为必须有一个更好的方法来获得这个集合,所以我改变了我的原始查询以急切加载集合,如下所示: var applications = context.LoanApplications.Include(“Solicitors”).Where… 尽管这会将对数据库的调用次数减少到只有一次, 但查询速度要慢得多,大约慢50%。 数据库托管在SQL Azure上,我们已经实现了瞬态error handling,但我希望减少对数据库的调用数量,而不会降低响应时间性能。 这里的最佳做法是什么?