【发布时间】:2011-12-22 15:06:43
【问题描述】:
我有一个(示例)应用程序,代码如下:
public class Posts
{
[Key]
[Required]
public int ID { get; set; }
[Required]
public string TypeOfPost { get; set; }
public int PollID { get; set; }
public virtual Poll Poll { get; set; }
public int PostID { get; set; }
public virtual Post Post { get; set; }
}
基本上,我不知道是否有更好的方法来做到这一点,但是,我有一个帖子列表,人们可以选择它是 Poll 还是 Post,作为实体框架不适用于 Enums,我只是将它作为字符串存储在 TypeOfPost 中,然后在应用程序中,我根据 TypeOfPost 的值以编程方式查询 Poll 或 Post。
我不认为有任何设置“只需要一个”或类似的设置,因此,我处理应用程序中的所有检查和内容。 (如果有人知道更好的方法,请说!)。
无论如何,问题是,我可以通过进入 SQL Management Studio 并手动编辑架构以允许空值来使其正常工作 - 但是,我无法弄清楚如何在 FluentAPI 中执行此操作,并且需要一些帮助。
我已经尝试了以下两种方法:
modelBuilder.Entity<Post>()
.HasOptional(x => x.Poll).WithOptionalDependent();
modelBuilder.Entity<Post>()
.HasOptional(x => x.Poll).WithOptionalPrincipal();
第一个似乎在数据库中创建了一个允许空值的附加列,而第二个似乎没有做任何事情。
我相信第一个是我需要的,但是,我需要将它与Post 类中的 [ForeignKey] 结合使用。如果我在这里是正确的,[ForeignKey] 应该放在虚拟财产上,还是财产的ID?
另外,WithOptionalDependent 和WithOptionalPrincipal 的实际区别是什么? - 我在 MSDN 上看过,但是,我真的不明白其中的区别。
【问题讨论】:
-
这真的是
Post类中的自引用吗?我的意思是:Post的类和导航属性的类型Post真的一样吗?你能否也画出Poll类。 -
@Slauma 抱歉,没有 :( 我只是想输入一段示例代码,但没有看到错误...谢谢。
标签: c# ef-code-first entity-framework-4.1