由于我已经有了LINQ to SQL数据访问解决方案的类,如果我想将它们迁移到EFCF,我会遇到什么麻烦?因为数据库已经存在,所以我首先要调用此代码。需要说明的是,该应用尚未投入生产,因此如果EFCF消除了数据,那么这并不是真正的损失。
我可以参加下面的课程,只需在EFCF中使用它吗?我应该还是必须删除数据注释属性?
我有EntityRef和EntitySet需要改变什么?
[Table]
public class PlanMember {
private EntityRef<SystemUser> _caseManager;
private EntityRef<PlanMemberStatus> _status;
public PlanMember() {
this.PlanMemberView = new Views.PlanMember();
}
[Column(
IsPrimaryKey = true,
IsDbGenerated = true,
AutoSync = AutoSync.OnInsert
)]
public Int64 ID { get; set; }
[Column]
public DateTime? BirthDate { get; set; }
[Column]
public String City { get; set; }
[Column]
public String FirstName { get; set; }
[Association(ThisKey = "CaseManagerID", Storage = "_caseManager")]
public SystemUser CaseManager {
get { return (this._caseManager.Entity); }
set { this._caseManager.Entity = value; }
}
[Column]
public String CaseManagerID { get; set; }
[Column]
public Boolean IsActive { get; set; }
public Boolean IsEligible {
get { return (this.PlanMemberView.IsEligible); }
}
[Column]
public String LastName { get; set; }
[Column]
public String MedicalRecord { get; set; }
[Column]
public String MemberNumber { get; set; }
[Column(Name = "PCPFullName")]
public String PrimaryCarePhysicianFullName { get; set; }
[Association(OtherKey = "PlanMemberID")]
public Views.PlanMember PlanMemberView { get; set; }
[Column]
public Int32 PostalCode { get; set; }
[Column]
public String Sex { get; set; }
[Column]
public String State { get; set; }
[Association(ThisKey = "StatusID", Storage = "_status")]
public PlanMemberStatus Status {
get { return (this._status.Entity); }
set { this._status.Entity = value; }
}
[Column]
public Int32 StatusID { get; set; }
}
答案 0 :(得分:4)
我们将应用程序从Linq迁移到Sql到EF POCO生成但是没有先尝试过代码,因为当时没有编写代码。真的不是非常困难。我们案例中的主要痛点是以下差异:
如果没有一套非常有效的单元测试,我会尝试这样做,以便为您提供自动化的基础,为您提供非常规律的温度读数。我们的另一个天赐之物是我们有一个非常可靠的Repository模式实现 - 没有直接与EF / Linq2Sql位进行对话,而是两个实现IRepository的类。基本上,这是对您在实施架构方面的纪律性的一个很好的测试。此外,这是一个你认识到resharper值得每一分钱的场合。
要回答你的一个直接问题,我认为属性不一定重要,但我会删除它们,以免发生任何潜在的混淆和/或名称空间冲突。
答案 1 :(得分:1)
假设您的类的名称与数据库表的名称相同,并且类的属性与数据库列名相匹配,您应该能够删除所有属性并使用与EF代码优先模型相同的类(I不要认为你必须删除属性,但除非你打算继续在Linq2Sql模型中使用它们,否则没有理由保留它们,并且由于迁移中可能会有一些变化,最好删除它们因为你的新实体可能仍然无法在Linq2Sql中工作)。如果您的类与数据库架构不匹配,请Scott Guthrie has a blog post about Entity Framework 4 "Code-First": Custom Database Schema Mapping。
我有EntityRef和EntitySet需要改变什么?
定义为EntityRef<OtherEntity>
的关系可以替换为OtherEntity
类型的属性,EntitySet<OtherEntity>
可以成为ICollection<OtherEntity>
或实现ICollection<T>
的任何内容例如IDbSet<OtherEntity>
(我相信如果你从现有数据库生成模型,你会得到一个DbSet<T>
。)