1)
我有一个与WCF一起使用的Entity Framework(v.5)项目 .
我的数据库有一个Account表,因此我有一个“Account”实体框架对象 . 我想公开一个方法:
AddAccount(Account a)
Account Parameter是从我的DataBase生成的实体框架对象 .
每次我尝试使用此服务时,Account的属性都是空的,我无法理解为什么 .
以下是我的代码示例:
WCF:
接口:
[OperationContract(Name = "AddAccount")]
string AddAccount(Account Account);
实行:
public string AddAccount(Account newAccount)
{
myContext db=new myContext();
db.Accounts.Add(newAccount);
db.SaveChanges();
return "something";
}
帐户类由EF生成,并且具有 int
"id"字段和 DateTime
"Created"字段 .
我的问题是,为什么“newAccount”参数为空?
2)
据我所知,暴露具有复杂参数的方法的最佳方法是使用 DataContract
和 DataMembers
,这引发了两个我想问的问题 .
a)我是否需要将 DataContract
实现为Entity对象?根据我的理解,它不建议直接公开EF对象,但在类I上使用 DataContract
,在Account上实现 DataContract
.
b)为什么不建议将EF对象作为参数传递,除了让客户端理解我的数据库表的构建?
谢谢 .
1 回答
在数据库中,您可以将标识规范分配给id字段,并且可以为创建的字段指定默认值 .
如果您具有id列并已创建,则需要初始化Created . 除非数据库中没有标识规范,否则无需初始化id字段 . 通常,您需要初始化值,因为您的数据库无法猜测应该为您的属性分配哪些值 .
因此,您的实体不是由数据库创建的,它是由您的方法创建的,它是空的,因为您没有初始化它 . 示例初始化
您的实体类不需要实现DataContract,我的项目无可挑剔地使用EF对象,这些对象是未实现DataContract的类的实例 .
您可以将EF对象作为参数传递到业务逻辑中,这绝对没有问题 . 您只需要小心不要让客户知道数据库的架构是什么 .
我希望这有帮助 .