小编Ing*_*mar的帖子

.WithMany()和.WithOptional()之间的区别?

以下是两种类似的流畅API配置:

和很多()

modelBuilder.Entity<Country>()
            .HasRequired(cou => cou.Currency)
            .WithMany()
            .WillCascadeOnDelete(false); 
Run Code Online (Sandbox Code Playgroud)

WithOptional()

modelBuilder.Entity<Country>()
            .HasRequired(cou => cou.Currency)
            .WithOptional()
            .WillCascadeOnDelete(false);
Run Code Online (Sandbox Code Playgroud)

我在这里要表达的是:每个都Country需要具体Currency,但是Currency可以分配给零,一个或多个国家.

我必须使用上述哪一项陈述?或者换句话说:究竟有什么区别.WithMany().WithOptional()运营商?

entity-framework fluent-interface ef-code-first

24
推荐指数
1
解决办法
2万
查看次数

实体框架:使用CodeFirst设置删除规则

我正在使用EF4 CTP 5,CodeFirst.

请先看我的课程:

public class Guest
{
        [Key]
        public Guid GuestID { get; set; }

        public Language PreferredLanguage { get; set; }
        public Guid? LanguageID { get; set; }
}

public class Language
{
        [Key]
        public Guid LanguageID { get; set; }

        [Required(ErrorMessage = "Enter language name")]
        [StringLength(50, ErrorMessage = "Language name is too long")]
        public string LanguageName { get; set; } // in origine language
}
Run Code Online (Sandbox Code Playgroud)

我的目标是为访客语言关系设置一定的"删除规则".删除语言时,我不想删除相应的guest虚拟机(因此级联删除).相反,我希望客人的LanguageID为"Set NULL".

我希望流利的API在这里支持我.但我找不到任何有用的东西.WillCascadeOnDelete(bool),它不提供我需要的选项.我错过了什么吗?或者这只是在CTP 5中没有实现?

谢谢你的帮助!

cascading-deletes entity-framework-4 entity-framework-ctp5

19
推荐指数
1
解决办法
1万
查看次数

EF4.1 CodeFirst:添加字段以连接表

我使用EF 4.1 RC和CodeFirst/POCO按代码构建我的数据库.

想象一下,像师生一样有多对多的关系(一个教师可以有很多学生,一个学生可能有很多老师).因此,我有两个POCO:(1)教师和(2)学生.

当EF创建相应的表格时,您将最终得到三个表格:(1)教师,(2)学生和(3)额外的联接表格.连接表恰好包含两个字段:Teacher_ID和Student_ID.

我想知道我是否有机会在联接表中添加额外的字段,例如"成绩"(某位老师给某位老师的成绩)?

目前我不知道如何只用两个POCO来实现这一点.

所以我想我能做的就是手动创建第三个POCO(用于连接表),对吗?这肯定会奏效,但后来我失去了很好的导航属性,如oneTeacher.Students.First()等.这是我仍在寻找另一种方式的主要原因.

ef-code-first entity-framework-4.1

4
推荐指数
1
解决办法
1148
查看次数

EF 4.1 RC:奇怪的级联删除

我不得不承认,EF 4.1 RC Codefirst,DataAnnotations和FluentAPI的功能对我来说仍然是压倒性的.有时我真的不知道我在做什么;-)请看下面的POCO:

public class Country
{
    [Key]
    public Guid ID { get; set; }

    [Required]
    public virtual Currency Currency { get; set; }
}

public class Currency
{
    [Key]
    public Guid ID { get; set; }

    public virtual ICollection<Country> Countries { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

总体思路:每个国家都需要有货币.但是根本不需要将货币分配给一个国家.

如果让EF创建相应的数据库,则按照约定将关系设置为CASCADE DELETE.换句话说:如果删除货币,也会删除相应的国家/地区.但就我而言,这不是我想要的.

我在FluentAPI中想出了一些代码来禁用CASCADE DELETE:

modelBuilder.Entity<Country>()
            .HasRequired(cou => cou.Currency)
            .WithOptional()
            .WillCascadeOnDelete(false);
Run Code Online (Sandbox Code Playgroud)

我认为这意味着:每个国家都需要一种货币.此货币可能有零个,一个或多个国家/地区(可选).每当我删除一种货币时,相应的国家(如果有的话)都不会被级联删除.

令人惊讶的是,如果删除相应的货币,给定的方法仍会级联删除国家/地区.任何人都可以告诉我我想念的是什么吗?

fluent-interface cascading-deletes ef-code-first entity-framework-4.1

4
推荐指数
1
解决办法
3462
查看次数