使用Power Tools 4的Entity Framework 6.1在使用命令时会生成错误:
在上下文中查看实体数据模型(只读)。
错误:
尝试为Context构建模型时发生错误。有关详细信息,请参阅输出窗口。
输出窗口基本上表明:
System.Reflection.TargetInvocationException:调用目标抛出了异常。 ---> System.MissingMethodException:找不到方法:' xyz.domain.User xyz.domain.DomainBase.get_ModifiedBy()'
* CRITICAL * 电动工具也在缓存架构,不会随着更改而更新! ***
示例:
创建基类:
public abstract class DomainBase {
public DateTime DateCreated { get; set; }
public DateTime DateModified { get; set; }
public User CreatedBy { get; set; }
public string CreatedByName { get; set; }
public User ModifiedBy { get; set; }
public string ModifiedByName { get; set; }
}
创建一个继承自基类的类:
public class User : DomainBase {
public int UserId { get; set; }
public string Username { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Password { get; set; }
public string Salt { get; set; }
public string Pin { get; set; }
}
创建基本映射:
public class DomainBaseConfig<TEntity> : EntityTypeConfiguration<TEntity>
where TEntity : DomainBase {
public DomainBaseConfig() {
this.HasOptional(c => c.ModifiedBy).WithOptionalDependent()
.Map(m => m.MapKey("ModifiedById"));
this.HasOptional(c => c.CreatedBy).WithOptionalDependent()
.Map(m => m.MapKey("CreatedById"));
this.Property(t => t.CreatedByName).HasMaxLength(FieldMaxSize.FullName).IsRequired();
this.Property(t => t.ModifiedByName).HasMaxLength(FieldMaxSize.FullName).IsRequired();
this.Property(t => t.DateCreated).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);
this.Property(t => t.DateModified).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);
}
}
创建用户类映射:
public UserConfig() {
this.ToTable("Users");
this.HasKey(c => c.UserId);
this.Property(t => t.FirstName).HasMaxLength(FieldMaxSize.FirstName).IsRequired();
this.Property(t => t.LastName).HasMaxLength(FieldMaxSize.LastName).IsRequired();
this.Property(t => t.Password).HasMaxLength(FieldMaxSize.Password).IsRequired();
this.Property(t => t.Pin).HasMaxLength(FieldMaxSize.Pin).IsRequired();
this.Property(t => t.Salt).HasMaxLength(FieldMaxSize.Salt).IsRequired();
this.Property(t => t.Username).HasMaxLength(FieldMaxSize.Username).IsRequired().HasColumnAnnotation(IndexAnnotation.AnnotationName, new IndexAnnotation(new IndexAttribute("IX_Username", 1) { IsUnique = true }));
}
当试图查看模型时,错误似乎与引用父类需要基础的父类(它们相互引用)有关,而设计者并不喜欢这样,但EF处理它就好了。
证明:如果我删除对&#34;用户&#34;的引用在基类中,设计器将工作(严重)...注意...我通过删除引用User类及其关联映射的基类属性来实现它...但是......设计师STILL MODELS THEM!
因此,我删除了基类中的用户属性(ModifiedBy和CreatedBy),并且我还删除了相关的映射,然后设计器构建了模式的图形表示......但它仍然包含属性I刚刚注释掉了(它们显然已缓存在某个地方)!
请!
(1)更正设计器,使其不会像示例中提供的那样在有效模式上崩溃 (2)修复设计器的缓存问题,以便它永远不会为旧/陈旧代码上的设计者构建模式!
基于此示例,Power Tools设计器完全不可靠,因为它可以清楚地构建一个与实际代码/架构不匹配的模型。
答案 0 :(得分:1)
对于实体框架&gt; = 6,您需要使用实体框架设计器工具http://www.microsoft.com/en-au/download/details.aspx?id=40762