使用业务逻辑验证数据协定(基于实体)

时间:2010-10-29 14:53:52

标签: .net wcf entity-framework-4

我所有的服务方法都使用Facade来与业务逻辑进行对话。这意味着在Facade中,DataContracts(我正在使用WCF)被转换为实体(Entity Framework),然后传递给业务层。我现在面临的问题是我想在业务逻辑中放置某些验证逻辑,但这不会将数据契约转换为实体。

示例:我的外观上有一个名为CreateUser()的方法。传入的UserDataContract具有属性Name。这是数据库中的必填字段,因此实体框架在该成员上方放置了一个不可为空的属性(确切地说是[EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)])。我可以将验证逻辑放在业务层中,没问题。但是当翻译Name字段中带有null的UserDataContract时,会抛出ConstraintException:Entity Framework禁止我在UserEntity类的Name字段中设置null值。

避免这种情况的优雅方法是什么? 我可以以某种方式删除实体框架中此字段的检查(将nullable属性设置为true将使EF抱怨映射到不可为空的列)。 是否有一些模式可用于将验证机制引入业务层并从外观中使用它?

我有多个外墙,同一实体有多个数据合约。但仍然是一个实体类型和一个业务层。

我在这里使用.Net 4.0。

谢谢!

1 个答案:

答案 0 :(得分:1)

  1. 使用POCOs:数据库层和业务层=业务对象中的相同类/对象
  2. 使用例如DataAnnotations为您的业务对象添加验证属性。