我只是尝试使用自我跟踪POCO方法做一些广泛的模型。但是,我确实没有按照自己的意愿去工作。我们来一个博客吧。每个博客都有一组条目,每个条目都有一组评论。不幸的是,以下模型对我不起作用。 alt text http://blog.zoolutions.se/issue.png
POCO类的实现如下:
public class Blog
{
public bool Id { get; private set; }
public string Title { get; set; }
public bool AllowComments { get; set; }
public User User { get; set; }
public IList<Entry> Entries { get; set; }
}
public abstract class Post
{
public virtual int Id { get; set; }
public virtual string Header { get; set; }
public virtual string Text { get; set; }
public virtual DateTime CreatedAt { get; set; }
public virtual int UserId { get; set; }
}
public class Entry : Post
{
public Blog Blog { get; set; }
public IList<Comment> Comments { get; set; }
}
public class Comment : Post
{
public Entry Entry { get; set; }
}
这给了我一个非常奇怪的错误:
System.Data.MetadataException:Schema 指定无效。错误: CLR类型到EDM类型的映射是 因为多种CLR类型而模棱两可 匹配EDM类型'Entry'。先前 发现新发现的CLR类型'Entry' CLR类型 'System.Collections.Generic.Dictionary
2+Entry'. The mapping of CLR type to EDM type is ambiguous because multiple CLR types match the EDM type 'Entry'. Previously found CLR type 'Entry', newly found CLR type 'System.Runtime.CompilerServices.ConditionalWeakTable
2 +条目'。
任何线索?我无法绕过那条错误信息......
答案 0 :(得分:4)
在Beta1中,CLR类到EDM类型的映射有些不可原谅。
听起来好像这里的问题是找到了多个“Entry”类,它们与所需的“Entry”实体不匹配。我们应该忽略这些,但在Beta1中我们没有,你会得到一个例外。
我们已经为下一个测试版开发了这个,所以相反,EF继续寻找匹配的类,在你的情况下会找到你的Entry类,一切都没问题。
在Beta2发布之前,您可能需要将Entry类的名称更改为更独特的名称。
希望这有帮助
亚历
实体框架团队的项目经理。
答案 1 :(得分:1)
无法在Alex James的回复下添加此帖子。
EF4仍然有一个错误,微软已经在EF 4 Beta 2中修复了类似的错误。
当类似local
名称的类存储在包含实体的程序集中但属于不同的EF4 edmx
模型文件时(例如:当Country
实体存在时),我遇到了一个错误在GeographyConfigurationModel.edmx和CustomerServiceModel.edmx中。两个Country
类在每个模型中包含不同的属性集,每个模型位于单独的项目文件夹中,指定entity namespace
模型属性(并立即忽略)。