在过去,在LinqPad中将连接设置为具有EF模型的自定义程序集很容易.Linqpad寻找一个基于System.Data.Objects.ObjectContext哪个不存在的
如何(如果有的话)使他们的模型组件与LinqPad兼容.
我有这个架构:
create table Person
(
id int identity primary key,
name nvarchar(30)
)
create table PersonPersons
(
PersonId references Person(id),
ChildPersonId references Person(id)
)
Run Code Online (Sandbox Code Playgroud)
如何创建使用EF4 Code First CTP5映射它们的类?
entity-framework code-first entity-framework-4 ef-code-first entity-framework-ctp5
我正在使用实体框架Code First CTP5,我试图找到一种方法来添加一个约定来改变外键名称的生成方式.这是一个例子:
public class Lead
{
public int Id {get; set;}
// A lot of other fields
public virtual User AssignedTo { get; set; }
}
public class User
{
public int Id {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
潜在客户可以与用户相关联.在Leads表的DB for AssignedTo中生成的字段称为UserId.
我的模型完全独立于实体框架.所以我不想使用EF的属性.我想在可能的情况下使用约定将字段命名为AssignedToUserId.
有没有人在EF 4.1代码优先解决方案中部署数据库更改有任何最佳实践?我知道MS目前不支持EF 4.1的数据库迁移,但显然人们不时需要这样做.
谢谢
我在Silverlight应用程序中使用Silverlight 5 Beta SDK和EntityFramework 4.1.
我将尝试创建两个表'Author'和'Book'.在SQL中,应该有第三个(连接)表,它在Author和Book之间建立多对多关系(一个作者可以编写很多书,一本书可以从许多作者那里编写).
这是我到目前为止所得到的:
namespace CodeFirst.Models.Web
{
public class Author
{
public Author()
{
this.Books = new HashSet<Book>();
}
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public int ID { get; set; }
[Required]
public string Name { get; set; }
public ICollection<Book> Books { get; set; }
}
public class Book
{
public Book()
{
this.Authors = new HashSet<Author>();
}
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public int ID { get; set; }
[Required]
public string Name { get; set; }
public ICollection<Author> Authors { …Run Code Online (Sandbox Code Playgroud) 我在数据库中有一个不能为null的列,我想将其设置为在数据库中具有默认值.问题是实体框架似乎自己创建了一个默认值(例如,int => 0),并完全忽略了数据库中的默认值约束.
有没有办法禁用这个实体框架的默认值?
我有以下两种型号
public class Account
{
public int Id { get; set; }
public string Name { get; set; }
public int CurrentPeriodId { get; set; }
[ForeignKey("CurrentPeriodId")]
public virtual Period CurrentPeriod { get; set; }
public virtual ICollection<Period> Periods { get; set; }
}
public class Period
{
public int Id { get; set; }
public int AccountId { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public virtual Account Account …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用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; }
}
Run Code Online (Sandbox Code Playgroud)
初始创建工作正常,但更新只提交对字符串的更改.
如果我改变的子对象,例如在JobType从地产JobTypeA到JobTypeB-更改不会犯...
我不打算对JobType进行更改 - 仅限于Job.
using (var context = new JobContext())
{
context.Jobs.Attach(job);
context.Entry(job).State = EntityState.Modified;
context.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
看看SQL Profiler - 甚至没有为更新发送ID - 但它们是用于初始插入!
我的代码中有一个特定的查询,需要急切加载所有相关的实体(两个 - > 1个FK和 - > N个FK),因为上下文将在此之后处理.
我做了一个通用的"查询"方法,params Expression<Func<MyItem, object>>[] includes然后内部链接它们.那部分工作正常.
查询如下所示:
var item = facade.Query<MyItem>(
c => c.Childs.Select(x => x.Parent),
c => c.Childs.Select(x => x.SubChild1),
c => c.Childs.Select(x => x.SubChildNotWorking),
c => c.Childs.Select(x => x.SubChild2),
c => c.Childs.Select(x => x.SubChild3),
c => c.Childs.Select(x => x.SubChildrens)
).FirstOrDefault(c => c.Name == name);
Run Code Online (Sandbox Code Playgroud)
不工作属性的映射(放置在SubChildNotWorking的配置中):
this.HasMany(scnw => scnw.Childs).WithOptional(c => c.SubChildNotWorking).HasForeignKey(c => c.MyForeignKey);
Run Code Online (Sandbox Code Playgroud)
在所有包含中,只有SubChildNotWorking实际上不起作用.在使用调试器检查返回的对象时,我会在所有属性上看到代理.打开代理为我提供了所有其他关系的正确数据,并为该SubChildNotWorking属性提供了"objectcontext已被处置异常" .
我能够发现的唯一区别是,它SubChildNotWorking是一个可以为空的FK(DB上有可空列和dbcontext中的WithOptional配置),而所有其他都是使用WithRequired配置的不可空FK.
数据库也是一个没有使用Code First创建的遗留数据库而不遵循其约定,我只是在DbContext中进行了映射.其他一切都很好.
我试图找出是否急于加载对可空的FK不起作用,但我找不到任何关于它的文档.
这是一个错误,还是预期的行为?但最重要的是,我该如何解决这个问题呢?
谢谢.
如何使此列与数据库中的PERSISTED COMPUTED列类似?
我当前的尝试(它在种子中加载所有带有null的CompCol行):
public class Call
{
public Call()
{
}
[Key]
public int Id { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public string CompCol
{
get
{
return "ABC-" + Convert.ToString(Id).PadLeft(5, '0');
}
protected set {}
}
}
Run Code Online (Sandbox Code Playgroud) code-first ×10
c# ×4
asp.net ×1
lazy-loading ×1
linqpad ×1
many-to-many ×1
silverlight ×1
sql-server ×1