0

我从我的数据库生成了一个模型(使用EF),我将代码生成策略设置为None,然后我创建了具有与模型中相同属性的(POCO)类,现在我的业务类与EF分离。(我的模型只有两个类:问题和答案。一个问题可以有更多的答案)。

这段代码很好:

Question q=db.Questions.First();
Answer a=q.Answers.First();
a.Title+=" modified";
q.Answers.Add(new Answer(){Text="bla bla bla"});
db.SaveChanges();

我有一点不便:

Question q=db.Questions.First();
Answer a=q.Answers.First();
q.Answers.Remove(a);
db.SaveChanges();

使用此代码,我有此错误:

无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。

但这可以通过以下方式完成:

Question q=db.Questions.First();
Answer a=q.Answers.First();
db.Answers.DeleteObject(a);

那么,当我的 EF 足够好时,为什么我需要 Castle Windsor(动态代理)?EF 和 Castle Windsor 一样好用,它在运行时继承了我的 POCO 类。

1) 如果我有 EF,DynamicProxy(Castle Windsor) 和 AOP(PostSharp) 有什么作用?

2)当我可以在编译时继承我的 POCO 类时,我需要什么动态代理(带反射)?(这是可选的,可以为这个主题创建另一个问题)

对不起,我的英语不好。

4

0 回答 0