C# 实体框架异常行为

C# 实体框架异常行为,c#,sql-server-2008,entity-framework,associations,C#,Sql Server 2008,Entity Framework,Associations,直到本周我才开始使用EF v5,现在我正在做一些数据库更改,它做了一些非常奇怪的事情 我删除了一个NVARCHAR Country字段,并将其替换为CountryId int字段,该字段是Country表的Id列的外键 ALTER TABLE [dbo].[UserProfile] WITH CHECK ADD CONSTRAINT [FK_UserProfile_Countries] FOREIGN KEY([CountryId]) REFERENCES [dbo].[Countrie

直到本周我才开始使用EF v5,现在我正在做一些数据库更改,它做了一些非常奇怪的事情

我删除了一个NVARCHAR Country字段,并将其替换为CountryId int字段,该字段是Country表的Id列的外键

ALTER TABLE [dbo].[UserProfile]  WITH CHECK ADD  CONSTRAINT [FK_UserProfile_Countries]   FOREIGN KEY([CountryId])
REFERENCES [dbo].[Countries] ([Id])
在VS2012中更新模型确实是做了一些意想不到的事情。它在我删除的字段上报告了一个错误:

错误11010:未映射关联结束“国家/地区”

我在模型中添加了两个虚拟字段,但似乎不正确:

public partial class UserProfile
{
    public int UserId { get; set; }
    ...
    public int CountryId { get; set; }

    public virtual Country Country { get; set; }
    public virtual Country Country1 { get; set; }
}
我读到设计器有一个bug,在.tt文件上手动运行runcustom工具可以修复这个问题,但它似乎不起作用


有人看到或解决了这个问题吗?

只是为了测试,我完全从头开始重新创建了我的模型。删除了所有的文件。在从头开始重新创建模型后,查看Country.cs文件吓得我魂不附体。。。如果我的假设是正确的。班上的同学最后看起来是这样的:

public partial class Country
{
    public Country()
    {
        this.UserProfiles = new HashSet<UserProfile>();
    }

    public int Id { get; set; }
    public string CountryCode { get; set; }
    public string CountryName { get; set; }

    public virtual ICollection<UserProfile> UserProfiles { get; set; }
}

如果我的假设是这样的话,那么从性能的角度来看,这看起来很可怕。从这个类来看,如果我检索到,比如说,美国的行,那么它也会加载我们作为国家的每个配置文件。。。还是我疯了?设计师今天伤了我的脑筋…

为了记录我在数据库上花了这么多时间,首先我放弃了它,而是写代码…

你有一个现有的数据库,还是数据库随着项目的发展而发展?如果后者是正确的,你应该首先考虑使用EF代码,而不是依赖于T.ToT:或者它正在与项目一起发展。这个设计师看起来非常笨重和笨重,相比之下,SQLMetal工作起来很有魅力!这让我完全推迟使用EF。谢谢你的链接,我现在就去看。是的,我也不喜欢这个设计师。当代码第一次在EF4.1中得到完全支持时,我想这是一种解脱。没有模型和图表,只有sweeeeet代码:您是使用数据库优先还是模型优先的方法?也就是说,您是在模型中进行更改然后重新生成数据库,还是在数据库中进行更改然后将其反向工程到模型?我正在从数据库到模型,坦率地说,这是一个可怕的经历。。。