请原谅我,如果这个问题看起来很愚蠢,但我对整个函数式编程世界都很陌生,所以我需要在StackOverflow上使用一些居民来让我直截了当.
从我收集的内容来看,对monad的操作会返回monad.这是否意味着monad具有流畅的接口,其中应用于monad的每个函数在将一些操作应用于它包装的变量之后返回该monad?
我有一个基础对象,我不希望在DB中作为一个实体映射,我只希望将属性添加到DB中映射的对象:
没有映射的对象(不知道它是否重要但是baseobject在另一个程序集中):
public class BaseObject
{
public virtual string Prop1 { get; set; }
public virtual string Prop2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
映射对象:
public class ChildObject : BaseObject
{
public virtual string Prop3 { get; set; }
public virtual string Prop4 { get; set; }
public virtual string Prop5 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
什么在DbContext中注册
public DbSet<ChildObject> ChildObjects { get; set; }
Run Code Online (Sandbox Code Playgroud)
我想在Db看到什么
table:ChildObject
col:Prop1 (from BaseObject)
col:Prop2 (from BaseObject)
col:Prop3
col:Prop4
col:Prop5
Run Code Online (Sandbox Code Playgroud)
要恢复,我想要做的是在Db中有一个具有子项和基本属性的表.
这是我目前得到的错误:
未映射类型"namespace.ChildObject".使用Ignore方法或NotMappedAttribute数据批注检查未明确排除类型.验证类型是否已定义为类,不是原始类,嵌套类还是通用类,并且不从EntityObject继承.
我一直在挖,但找不到怎么做.
有任何想法吗?
编辑: …
我有一个流畅的界面问题.
我们有一些对象用作SQL接口的参数对象,这是一个例子:
using (DatabaseCommand cmd = conn.CreateCommand(
"SELECT A, B, C FROM tablename WHERE ID = :ID",
SqlParameter.Int32(":ID", 1234)))
{
...
}
Run Code Online (Sandbox Code Playgroud)
对于其中一些参数,我想启用一些专门的选项,但不是向Int32方法添加更多属性(这只是其中之一),我想我会研究流畅的接口.
这是我添加了我正在研究的内容的示例:
SqlParameter.Int32(":ID", 1234).With(SqlParameterOption
.Substitute
.Precision(15)
)
Run Code Online (Sandbox Code Playgroud)
我知道这两种选择对于这种类型的参数没有意义,但这不是问题所在.
在上面的例子中,Substitute必须是SqlParameterOption类的静态属性(或者我只是添加一些括号的方法),而Precision必须是实例方法.
如果我重新排序它会怎么样?
SqlParameter.Int32(":ID", 1234).With(SqlParameterOption
.Precision(15)
.Substitute
)
Run Code Online (Sandbox Code Playgroud)
那么Substitute就必须是实例属性而Precision是静态方法.这当然不会编译,我不能同时拥有静态和非静态属性或方法.
我该怎么做呢?我在这里走错了路吗?
在重读这个问题时,我有一个想法,下面这个不同的语法会更有意义吗?
SqlParameter.Int32(":ID", 1234).With
.Precision(15)
.Substitute
Run Code Online (Sandbox Code Playgroud)
在这种情况下,两者都是返回的实例方法,这将是SqlParameter选项的专用类或接口,如下所示.我不确定是否要转储.With部分,因为这会暴露对象的所有方法,而不仅仅是流利的方法.
建议和一些好的网址将是最受欢迎的,我已经仔细研究了许多例子,但他们倾向于展示这样的例子:
order
.AddFreeShipping()
.IncludeItem(15)
.SuppressTax();
Run Code Online (Sandbox Code Playgroud)
(从这个页面解除)
编辑:来自@marxidad的回复后的跟进:
class SqlParameterOption
{
public SqlParameterOption Precision(int p) {/* ... */; return this;}
public SqlParameterOption Substitute() {/* ... …Run Code Online (Sandbox Code Playgroud) 我试图在PHP中找到关于可链接OOP对象的一个很好的介绍,但还没有任何好的结果.
这样的事情怎么办?
$this->className->add('1','value');
$this->className->type('string');
$this->classname->doStuff();
Run Code Online (Sandbox Code Playgroud)
甚至: $this->className->add('1','value')->type('string')->doStuff();
非常感谢!
我的情况是用户可以拥有多个地址.因此,我的用户类上有一个ICollection.但我也希望用户能够选择默认地址.所以我做了以下事情:
public class User
{
public int Id { get; set; }
public int? DefaultAddressId { get; set; }
[ForeignKey("DefaultAddressId")]
public virtual Address DefaultAddress { get; set; }
public virtual ICollection<Address> Addresses { get; set; }
//properties were removed for purpose of this post
}
Run Code Online (Sandbox Code Playgroud)
我想public virtual Address DefaultAddress { get; set; }完全删除,保留DefaultAddressId并使用Fluent API映射它,因为当前的设置导致了很多麻烦(在这个和其他我有类似设置的类中).那么可以使用流畅的api来完成吗?
更新: 地址类当前没有对User类的任何引用,它是一个单向关系.但是,是的,一个地址只属于一个用户,它不是一个多对多的关系.这是地址类:
public class Address
{
public int Id { get; set; }
public string Name { get; set; }
public string Details { …Run Code Online (Sandbox Code Playgroud) entity-framework fluent-interface ef-code-first entity-framework-4.1
Castle Windsor刚刚推出了一个用于注册组件的Fluent接口,作为在配置文件中使用XML的替代方法.如何使用此Fluent界面注册Generic界面?
为了说明,我有:
public interface IFoo<T,U>
{
public T IToo();
public U ISeeU();
}
Run Code Online (Sandbox Code Playgroud)
这是由一个名为Foo的类实现的.现在,如果我想注册这个,我会做...
var _container = new WindsorContainer();
_container.Register(...);
Run Code Online (Sandbox Code Playgroud)
如何进行注册?执行非通用接口的过程不起作用.
我有以下课程:
public class User
{
public Guid Id { get; set; }
public string Name { get; set; }
public Couple Couple { get; set; }
}
public class Couple
{
public Guid Id { get; set; }
public User Groom { get; set; }
public User Bride { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
重点:
Bride和Groom属性是必需的User课堂上,这是Couple必需的OnModelCreating中的DbContext
modelBuilder.Entity<User>().HasRequired(u => u.Couple).WithRequiredPrincipal();
modelBuilder.Entity<Couple>().HasRequired(u => u.Bride).WithRequiredDependent();
modelBuilder.Entity<Couple>().HasRequired(u => u.Groom).WithRequiredDependent();
Run Code Online (Sandbox Code Playgroud)
但我不能被要求!
所有文件在数据库中都为null!
如何将数据库中的字段设为非空? 如果可能,使用API Flient.
TL;博士
尝试实现一个层次流畅的界面,这样我就可以组合节点子类,同时也可以独立于类,但是获取类型参数不在其绑定错误范围内.
细节
我正在尝试实现一个解决方案,以便我可以创建一些类似于以下内容的东西:
farm
.animal()
.cat()
.meow()
.findsHuman()
.saysHello()
.done()
.done()
.dog()
.bark()
.chacesCar()
.findsHuman()
.saysHello()
.done()
.done()
.done()
.human()
.saysHello()
.done();
Run Code Online (Sandbox Code Playgroud)
同时也能做到:
Human human = new Human()
.saysHello()
Run Code Online (Sandbox Code Playgroud)
我已经接近使用各种策略,但未能获得所描述的灵活性.
我当前的尝试使用以下类:
abstract class Base<T extends Base<T>>{
private T parent;
Base(){
}
Base( T parent ){
this.parent = parent;
}
public T done() throws NullPointerException{
if ( parent != null ){
return (T) parent;
}
throw new NullPointerException();
}
}
class Farm<T extends Base<T>> extends Base{
private Animal<Farm<T>> …Run Code Online (Sandbox Code Playgroud) 见下面的代码:
new ConditionCreator()
.Add()
.Or()
.Add()
.And()
.Add()
Run Code Online (Sandbox Code Playgroud)
我想为此创建一个Fluent接口但是我需要,在Add()方法开发人员看到Only Or()或And()之后,在其中一个之后,请参阅Only Add()方法.
所以没有人可以编写如下代码:
new ConditionCreator()
.Add()
.Add()
.Add()
.Or()
.And()
.Add()
.And()
.And()
Run Code Online (Sandbox Code Playgroud)
我希望有一些限制,一些方法可以接受特殊的方法等.我可以在一个类中编写所有方法,并为每一个返回这个,但这是不合适的!
请指导我如何编写Advanced Fluent Interface类.
我在ASP.NET核心2.0类库中使用FluentEmail,它将发送电子邮件通知.
下面是我到目前为止尝试过的示例代码:
using FluentEmail.Core;
using FluentEmail.Razor;
using FluentEmail.Smtp;
using System;
using System.IO;
using System.Net.Mail;
using System.Net.Mime;
namespace FluentEmail
{
public class EmailNotification : IEmailNotification
{
public bool SendEmailNotification()
{
try
{
//Setup Default sender befault sending the email.
SmtpClient smtpClient = new SmtpClient
{
Host = "smtp.office365.com",
Port = 587,
EnableSsl = true,
Credentials = new System.Net.NetworkCredential("username", "Password")
};
Email.DefaultSender = new SmtpSender(smtpClient);
Email.DefaultRenderer = new RazorRenderer();
string imagePath = @"C:\Users\pratik.soni\Downloads\FluentLogo.png";
Stream stream = new FileStream(imagePath, FileMode.Open, FileAccess.Read); …Run Code Online (Sandbox Code Playgroud) fluent-interface ×10
c# ×4
.net ×1
castle ×1
chainable ×1
code-first ×1
email ×1
generics ×1
html-email ×1
java ×1
monads ×1
oop ×1
php ×1