我遇到了一些問題,導致一組實體設置正常工作。我在VS2012中針對SQL Server 2008 R2 Express使用EF v5。插入實體框架一對一關係錯誤
對於生成的數據庫,一切似乎都正確,但我沒有成功寫入某些表。
我定義了一個UserProfile
對象,如:
[Table("UserProfile")]
public class UserProfile
{
[Key]
public long UserId { get; set; }
[StringLength(56)]
public string UserName { get; set; }
public Country Country { get; set; }
...
}
我也有Country
實體定義如下:
[Table("Country")]
public class Country
{
[Key]
public int Id { get; set; }
[StringLength(2)]
public string CountryCode { get; set; }
[StringLength(100)]
public string CountryName { get; set; }
public ICollection<UserProfile> UserProfiles { get; set; }
...
}
生成列在數據庫看起來是正確的,如果我劇本出來它看起來不錯:
ALTER TABLE [dbo].[UserProfile] WITH CHECK ADD CONSTRAINT [UserProfile_Country] FOREIGN KEY([Country_Id])
REFERENCES [dbo].[Country] ([Id])
GO
僅用於測試目的在控制器的行動我有以下幾點:
WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new
{
Country = new Country { Id = 223, CountryCode = "UK", CountryName = "UK" },
...
});
當執行該WebSecurity
方法我收到以下錯誤:
No mapping exists from object type MyApi.Data.Entities.Country to a known managed provider native type.
我試圖建立一個配置文件來指定代碼的關係,以及作爲數據庫,但它仍然不友好。
的配置是這樣的:
public class CountryEntityConfig : EntityTypeConfiguration<Country>
{
public CountryEntityConfig()
{
this.HasMany(x => x.UserProfiles)
.WithRequired()
.HasForeignKey(FKey => FKey.Country);
}
}
感覺非常奇怪其在該國的對象會收到一些基本知識完全不對本的配置文件列表?任何輸入讚賞。
編輯:
我再談一些類,並提出了一些修改,在用戶配置文件我現在有:
public int CountryId { get; set; }
public virtual Country Country { get; set; }
Country.cs
public class Country
{
public int CountryId { get; set; }
[StringLength(2)]
public string CountryCode { get; set; }
[StringLength(100)]
public string CountryName { get; set; }
public virtual ICollection<UserProfile> UserProfiles { get; set; }
}
而且數據庫現在在UserProfile表中包含兩個與Country表關聯的CountryId相關字段,我仍然得到原始錯誤m essage。
TIA,
Country實體已位於DbContext中。我見過的例子總是使用類的實例而不是Id屬性。你的意思是我需要在UserProfile類中包含'int CountryId'屬性並讓EF解決它? – Jammer
@Jammer - 你告訴EF你想插入一個新的國家,因爲你正在創建一個新的國家對象。雖然你可以做到這一點,但這可能不是你想要的。如果你這樣做,你不能提供一個ID,因爲ID是自動生成的。如果你只是想創建一個用戶並分配一個ID,那麼你應該通過用戶的CountryID屬性來分配它。 –
@Jammer - 從描述中可以清楚地看到,您已將Country表添加到DbContext。 –